[英]Update record in the database
我会保持简单。
我的控制器
public ActionResult Registrationform()
{
if (Session["UserID"] == null)
{
return RedirectToAction("Index", "Main");
}
else
{
return View();
}
}
[HttpPost]
public ActionResult Registrationform(AddressRegistration model)
{
var db = new AddressDBEntities();
if (ModelState.IsValid)
{
var Data = db.tblProfiles.Create();
Data.PROF_HomeAddr = model.Home_Address;
Data.PROF_WorkAddr = model.Work_Address;
db.tblProfiles.Add(Data);
db.SaveChanges();
return RedirectToAction("Index", "Members");
}
return View(model);
}
我的模特
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace Address.Models.Address
{
public class AddressRegistration
{
[Required(AllowEmptyStrings= false, ErrorMessage="Este campo es necesario.")]
public string Home_Address { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Necesary field.")]
public string Work_Address { get; set; }
}
}
我的观点
@model Address.Models.Address.AddressRegistration
@using (Html.BeginForm("Registrationform", "Members", FormMethod.Post, new {id = "wizardform"}))
{
@Html.ValidationSummary(true, "Please fix the errors.")
@Html.TextBoxFor(m => m.Home_Address)
@Html.TextBoxFor(m => m.Work_Address)
<input type="submit" value="submit" />
}
用户登录帐户后,我正在尝试更新数据库中的记录。 他可以填写此表格并更新地址。
在我的数据库中,当前默认情况下为NULL
。
我有一个主键设置为名为PROF_UserID
的列。
如果用户尝试访问MembersController.cs
视图, if (Session["UserID"] == null)
他/她将被重定向。
我正在尝试通过将家庭地址添加到PROF_HomeAddress
并将工作地址添加到PROF_WorkAddress
中来更新已登录的特定PROF_UserID
的记录,但是我使用的方法仅创建了一条新记录,而不更新它。
我已经搜索了一段时间,但找不到有关如何在MVC 4 C#中执行此操作的答案,而没有找到任何答案。
谢谢,如果您需要更多信息,请发表评论。
编辑:
我已经根据答案更改了一些代码。
调节器
[HttpPost]
public ActionResult Registrationform(AddressRegistration model)
{
var db = new AddressDBEntities();
if (ModelState.IsValid)
{
var updateData = db.tblProfiles.FirstOrDefault(r => r.PROF_UserID == model.UserID);
if (updateData != null)
{
updateData.PROF_HomeAddr = model.Home_Address;
updateData.PROF_WorkAddr = model.Work_Address;
db.SaveChanges();
}
return RedirectToAction("Index", "Members");
}
Response.Write("Error");
return View();
}
模型
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace Address.Models.Adress
{
public class AddressRegistration
{
public int UserID { get; set; }
[Required(AllowEmptyStrings= false, ErrorMessage="Necesary field.")]
public string Home_Address { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Necesary field.")]
public string Work_Address { get; set; }
}
}
视图
@model Address.Models.Address.AddressRegistration
@using (Html.BeginForm("Registrationform", "Members", FormMethod.Post, new {id = "wizardform"}))
{
@Html.HiddenFor(m=> m.UserID)
@Html.ValidationSummary(true, "check for errors.")
@Html.TextBoxFor(m => m.Home_Address)
@Html.TextBoxFor(m => m.Work_Address)
@Html.ValidationMessageFor(m=>m.Work_Address)
<input type="submit" value="submit" />
}
我已经尝试过了,但是最后总是给我@Html.ValidationSummary(true, "check for errors.")
错误和Response.Write("Error")
一个。
由于某种原因,控制器中的ModelState.IsValid
返回false。
我究竟做错了什么?
如果我删除@Html.HiddenFor(m=>m.UserID)
将与返回model.UserID
始终为0,不会在数据库中找到,我怎样才能使它所以它发现用户名当前用户登录了?
我的MainController
有
private bool ValidateUser(string Email, string Password)
{
bool isValid = false;
using (var db = new AddressDBEntities())
{
var User = db.tblProfiles.FirstOrDefault(u => u.PROF_Email == Email);
if (User.PROF_Password == Password)
{
Session["UserID"] = User.PROF_UserID;
isValid = true;
}
}
return isValid;
}
但是我使用的方法只会创建一条新记录,而不会更新它。
要更新记录,您需要首先从数据库中获取该记录,更新其字段,然后保存更改。
var updateData = db.tblProfiles.FirstOrDefault(r=> r.PROF_UserID == YourUserID);
if(updateData != null) // record found
{
//update fields with new values.
updateData.PROF_HomeAddr = model.Home_Address;
updateData.PROF_WorkAddr = model.Work_Address;
}
db.SaveChanges(); //persist changes to database
您需要将视图绑定到模型,该模型当前为空:
public ActionResult Registrationform()
{
if (Session["UserID"] == null)
{
return RedirectToAction("Index", "Main");
}
else
{
return View();
}
}
相反,请按照以下方式进行操作:
public ActionResult Registrationform()
{
if (Session["UserID"] == null)
{
return RedirectToAction("Index", "Main");
}
else
{
//here, use the UserID to get a reference to the user in your database and pass that to your view:
var registration = new AddressRegistration{
UserId = (int)Session["UserId"].ToString()
};
return View(registration);
}
}
然后,您的隐藏字段将保存用户标识,并且在您的后期操作中,应正确绑定模型。 但是,请研究在控制器操作上使用Authorize属性- 参见此处 。 有比自己控制访问更好的方法。
希望这能使您走上正确的道路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.