[英]Update database record
我正在尝试使用C#MVC更新配置文件表中的现有记录。
我需要制作2张单独的注册表。
我已经完成了第一个操作,并且它按计划工作,可以在数据库中使用基本信息创建用户记录。
[HttpPost]
public ActionResult Register(Registration signingUp)
{
var db = new ShareRideDBEntities();
if (ModelState.IsValid)
{
var Data = db.tblProfiles.Create();
Data.Prof_Email = signingUp.Email;
Data.Prof_Password = signingUp.Password;
db.tblProfiles.Add(Data);
int Saved = db.SaveChanges();
if (Saved != 0)
{
Response.Write("Success.");
}
else
{
Response.Write("Error.");
}
}
if (ModelState.IsValid)
{
if (ValidateUser(signingUp.Email, signingUp.Password))
{
FormsAuthentication.SetAuthCookie(signingUp.Email, false);
return RedirectToAction("Index", "Members");
}
else
{
ModelState.AddModelError("", "");
}
}
return View();
}
我现在想做的是使用另一种形式向现有记录添加一些新信息。
表格询问他的名字,姓氏,电话号码以及一个选项(带有单选按钮)(如果他/她是男性或女性)。
如果您需要更多信息,请发表评论,我将尽快解决。
编辑:
在我的Model
public class Registration
{
[EmailAddress]
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
}
在我的第二个model
public class ServiceRegistration
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
}
我仍然没有第二次注册的HttpPost
方法,因为我不确定该怎么做。
编辑:
好的,我根据得到的答案做了一些更改
我的ServiceRegistration.cs
模型
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace ShareRide.Models.Service
{
public class ServiceRegistration
{
[Required]
public Guid UserID { get; set; }
[Required(AllowEmptyStrings= false, ErrorMessage="Necesary Field.")]
public string FirstName{ get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Necesary Field.")]
public string LastName{ get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Necesary Field.")]
public string Phone{ get; set; }
}
}
在我的MembersController.cs
控制器上
public ActionResult Registrationform()
{
return View();
}
[HttpGet]
public ActionResult Registrationform(Guid UserID)
{
var model = new ServiceRegistration { UserID = UserID };
return View(model);
}
[HttpPost]
public ActionResult Registrationform(ServiceRegistration model)
{
var db = new ShareRideDBEntities();
if (ModelState.IsValid)
{
var Data = db.tblProfiles.Create();
Data.PROF_UserID = model.UserID;
Data.PROF_FirstName = model.Home_Address;
Data.PROF_LastName = model.Work_Address;
Data.PROF_Phone = model.Travel_Days;
db.SaveChanges();
return RedirectToAction("Index", "Members");
}
return View(model);
}
现在,我在model.UserID;
上收到一个错误model.UserID;
Cannot implicitly convert type 'System.Guid' to 'int'
在我的数据库上, PROF_UserID
是主键,并且是一个int
。
我也评论了Data.PROF_UserID = model.UserID;
因此我可以构建,但是当我尝试访问Registrationform
视图时,它返回错误:
首先,您需要修改ServiceRegistration模型以使用您的用户ID,以便我们可以将其附加到我们的实体。 我还添加了数据批注以进行验证,但是如果愿意,您可以选择忽略它们。
public class ServiceRegistration
{
[Required]
public int Id { get; set; }
[Required]
public String FirstName { get; set; }
[Required]
public String LastName { get; set; }
[Required]
public String Phone { get; set; }
}
接下来,您需要执行两个操作。 一种是通过GET请求提供表单,另一种是通过POST请求保存记录。
请注意,我们是如何传递用户ID的
public ActionResult AddUserInfo(int id)
{
var model = new ServiceRegistration{ id = id }
return View(model);
}
我不确定您的dbContext如何查找或添加用户,因此您需要自己添加它
[HttpPost]
public ActionResult AddUserInfo(ServiceRegistration model)
{
var db = new ShareRideDBEntities();
if(ModelState.IsValid)
{
//Find your user in your db context using model.Id as the reference
//Add the User Data from the model
db.SaveChanges();
return RedirectToAction("Index", "Controller");
}
//Form isn't valid so return form will the validation errors
return View(model);
}
最后,您的视图应命名为AddUserInfo并应如下所示
@model my.namespace.ServiceRegistration
@using(Html.BeginForm(“AddUserInfo”, “Controller”, HttpMethod.Post))
{
<!--Hide the id from the user-->
Html.HiddenFor(m => m.Id)
Html.TextboxFor(m => m.FirstName)
Html.TextboxFor(m => m.LastName)
Html.TextboxFor(m => m.Phone)
Html.ValidationSummary();
<input type=“submit” value=“Save” />
}
我刚刚在Mac的记事本应用程序上编写了此代码,因此可能存在一些语法错误,因此我向您道歉。
我希望这有帮助。
如果将用户重定向到其他视图页面,则需要使用TempData而不是ViewBag。 这是代码示例的草稿。 您可能需要对其进行修改以适合您的需求。
模型
public class Registration
{
[EmailAddress]
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
public virtual ServiceRegistration ServiceRegistration { get; set; }
}
在您的HTTPPOST调用中,在validateuser条件语句中添加一行
if (ValidateUser(signingUp.Email, signingUp.Password))
{
FormsAuthentication.SetAuthCookie(signingUp.Email, false);
TempData["Registration"] = signingUp;
return RedirectToAction("Index", "Members");
}
视图
@{
var tempRegistration = TempData["Registration"] as Registration
}
@Html.HiddenFor(model => model.Email, new { id = "email", value= tempRegistration})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.