在Save方法MVC上修改数据库中的数据

时间:2014-12-17 10:32:51

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

我在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方法来修改用户名。当我打开表单并且它已经在数据库中的用户名时,它将显示此信息。但如果我尝试更改它,它会给我一个错误,因为数据库中已经存在某些东西。

由于

1 个答案:

答案 0 :(得分: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);
    }  

这将更新现有条目以及添加新条目。