繁体   English   中英

更新数据库中的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM