【问题标题】:modifying data in Database on Save method MVC在保存方法 MVC 上修改数据库中的数据
【发布时间】:2014-12-17 10:32:51
【问题描述】:

我在 MVC 中有保存功能,数据存储到我的数据库中。

当我输入表单时,保存功能会添加数据...但是要修改我正在努力的当前数据。

控制器(保存)

         [HttpPost]
    public ActionResult Save(ReadingsUsersForm readingForm)
    {

        var model = new AddEditReadingsViewModel(readingForm);

        var addMeterReading = new M2CPDAL.Models.CustomerPortal.SerialReadingsUser();

                addMeterReading.ser_num = readingForm.SerialNumber;
                addMeterReading.prod_num = readingForm.ProductNumber;
                addMeterReading.UserName = readingForm.UserName;
                addMeterReading.AltUserName = readingForm.AltUserName;
                cpctx.SerialReadingsUsers.Add(addMeterReading);
                cpctx.SaveChanges();

                return View("_ReadingsUsers", model);
    }   

型号:

    public ReadingsUsersForm()
    {
        SerialNumber = ser_num;
        ProductNumber = _cpctx.vw_CurrentFleet.Where(s => s.ser_num == SerialNumber).Select(c => c.prod_num).FirstOrDefault();
        UserName = _cpctx.SerialReadingsUsers.Where(s => s.ser_num == ser_num).Select(c => c.UserName).FirstOrDefault();
        AltUserName = _cpctx.SerialReadingsUsers.Where(s => s.ser_num == ser_num).Select(c => c.AltUserName).FirstOrDefault();

    }

查看

@using (Html.BeginForm("Save", "Device", FormMethod.Post, new { enctype = "multipart/form-data" }))
{

<fieldset>
    <legend>Reading Details</legend>

    <div>
        @Html.LabelFor(m => m.SerialNumber)
        @Html.TextBoxFor(m => m.SerialNumber, new { @class = "form", @readonly = "readonly" })
        @Html.ValidationMessageFor(m => m.SerialNumber)
    </div>
    <div>
        @Html.LabelFor(m => m.ProductNumber)
        @Html.TextBoxFor(m => m.ProductNumber, new { @class = "form2", @readonly = "readonly" })
        @Html.ValidationMessageFor(m => m.ProductNumber)
    </div>

    <div>
        @Html.LabelFor(m => m.UserName)
        @Html.TextBoxFor(m => m.UserName, new { @id = "UserNameReading", @class = "form-add" })
        @Html.ValidationMessageFor(m => m.Form.UserName)
    </div>

    <div>
        @Html.LabelFor(m => m.AltUserName)
        @Html.TextBoxFor(m => m.AltUserName, new { @id = "AltUserNameReading", @class = "form-add2" })
        @Html.ValidationMessageFor(m => m.Form.AltUserName)

    </div>

    <div class="modal-footer">
        <input type="submit" id="ButtonSave" value="Submit" class="btn btn-primary">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
    </div>

</fieldset>

}

我需要在 actionResult Save 方法中修改用户名。当我打开表单并且它在数据库中已经有一个用户名时,它会显示这个。但是如果我尝试更改它,它会给我一个错误,因为数据库中已经有一些东西了。

谢谢

【问题讨论】:

  • 显示模型的完整定义(这是哪个模型 - 你的方法表示 3 个模型?)
  • 抱歉方法是 ReadingsUsersForm。但是有很多代码试图让它尽可能简单。一旦我得到了如何做到这一点的方向,我应该会很自在地这样做。
  • 那么您使用Save 方法创建了一个新的addMeterReading 记录,并且您尝试使用相同的方法来更新数据?
  • 是的,但我不确定如何更新数据,,,

标签: asp.net .net asp.net-mvc asp.net-mvc-4


【解决方案1】:

修改你的保存方法,先获取用户,然后再尝试保存:

     [HttpPost]
    public ActionResult Save(ReadingsUsersForm readingForm)
    {

        var model = new AddEditReadingsViewModel(readingForm);

        var addMeterReading = new M2CPDAL.Models.CustomerPortal.SerialReadingsUser();
        var existingUser = cpctx.SerialReadingsUsers.Where(x=>x.SerialNumber== readingForm.SerialNumber).FirstOrDefault();
       if(existingUser ==null)
       {
                addMeterReading.ser_num = readingForm.SerialNumber;
                addMeterReading.prod_num = readingForm.ProductNumber;
                addMeterReading.UserName = readingForm.UserName;
                addMeterReading.AltUserName = readingForm.AltUserName;
                cpctx.SerialReadingsUsers.Add(addMeterReading);
       }
       else
       {
                existingUser.ser_num = readingForm.SerialNumber;
                existingUser.prod_num = readingForm.ProductNumber;
                existingUser.UserName = readingForm.UserName;
                existingUser.AltUserName = readingForm.AltUserName;
        }
                cpctx.SaveChanges();

                return View("_ReadingsUsers", model);
    }  

这将更新现有条目并添加新条目。

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 2022-09-25
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2014-08-21
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多