如何在c#MVC实体框架中处理多个提交按钮和复选框?

如何在c#MVC实体框架中处理多个提交按钮和复选框?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个显示图像、id、姓名和地址的页面。我添加了复选框和多个提交按钮来删除更新或添加新记录。 但当我点击任何提交按钮时,我得到了未处理的异常错误。(例如,我选中了一个复选框并单击了“删除”按钮,我的控件将从视图中转到Mycontroller,并转到“删除开关”案例。它将删除记录,但当它返回视图时,我再次收到NullReferenceException。) 视图: @using (Html.BeginForm("MyAction", "MyController", FormMethod.Post

我有一个显示图像、id、姓名和地址的页面。我添加了复选框和多个提交按钮来删除更新或添加新记录。
但当我点击任何提交按钮时,我得到了未处理的异常错误。(例如,我选中了一个复选框并单击了“删除”按钮,我的控件将从视图中转到Mycontroller,并转到“删除开关”案例。它将删除记录,但当它返回视图时,我再次收到NullReferenceException。)

视图:

@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post))

{
   @if (Model.Count> 0) // .NullReferenceException
   {
      @foreach (var MyDB in Model)
      {              
         <div class="col-md-2">
              <img src="@Url.Content(photos.photo_url)" style="width:100px; height:100px;" />
          </div>

           Html.LabelFor(model => MyDB.ID, new
           {
               @class = "control-label col-md-2"
           })
           <div class="col-md-2">
               @Html.EditorFor(model => MyDB.ID)
               @Html.ValidationMessageFor(model => MyDB.ID)
            </div>
             @Html.LabelFor(model => MyDB.name, new
             {
                 @class = "control-label col-md-2"
             })
             <div class="col-md-2">
                  @Html.EditorFor(model => MyDB.name)
                  @Html.ValidationMessageFor(model => MyDB.name)
             </div>
             @Html.LabelFor(model => MyDB.address, new
             {
                 @class = "control-label col-md-2"
             })
             <div class="col-md-2">
                  @Html.EditorFor(model => MyDB.address)
                  @Html.ValidationMessageFor(model => MyDB.address)
             </div>
              <div class="col-md-1">
                    input type="checkbox" class="checkboxes" value="@MyDB.id" name="id" />
              </div>                          
        }
}
}
 <div class="col-md-offset-2 col-md-10">

       <input type="submit" name="submitButton" value="UPDATE" />
        <input type="submit" name="submitButton" value="ADD" />
        <input type="submit" name="submitButton" value="DELETE" />
</div>
@使用(Html.BeginForm(“MyAction”、“MyController”、FormMethod.Post))
{
@如果(Model.Count>0)/.NullReferenceException
{
@foreach(模型中的var MyDB)
{              
LabelFor(model=>MyDB.ID,新建
{
@class=“控制标签col-md-2”
})
@EditorFor(model=>MyDB.ID)
@Html.ValidationMessageFor(model=>MyDB.ID)
@LabelFor(model=>MyDB.name,新建
{
@class=“控制标签col-md-2”
})
@EditorFor(model=>MyDB.name)
@Html.ValidationMessageFor(model=>MyDB.name)
@LabelFor(model=>MyDB.address,新建)
{
@class=“控制标签col-md-2”
})
@EditorFor(model=>MyDB.address)
@Html.ValidationMessageFor(model=>MyDB.address)
输入type=“checkbox”class=“checkbox”value=“@MyDB.id”name=“id”/
}
}
}
控制器:

public ActionResult MyController(IEnumerable<int> id, string submitButton)
        {

            switch (submitButton)
            {
                case "DELETE":
                   foreach (var item in id)
                    {
                        var delete = _db.MyDB.FirstOrDefault(s => s.id == item);
                        if (delete != null)
                        {
                            _db.MyDB.Remove(delete);
                        }
                    }

                break;

                case "ADD":
                    if (!ModelState.IsValid)
                    {
                        return RedirectToAction("ADDRecordPage", new
                        {
                            id
                        });
                    }

                    if (id == null)
                    {
                        return RedirectToAction("ADDRecordPage", new
                        {
                            id
                        });
                    }
                break;
                case "UPDATE" :
                ViewBag.Message = "UPDATE";
                break;
            }

            _db.SaveChanges();

            ViewBag.Message = "Saved";
            return View();
        }
public ActionResult MyController(IEnumerable id,string submitButton)
{
开关(提交按钮)
{
案例“删除”:
foreach(id中的变量项)
{
var delete=\u db.MyDB.FirstOrDefault(s=>s.id==item);
如果(删除!=null)
{
_db.MyDB.Remove(删除);
}
}
打破
案例“添加”:
如果(!ModelState.IsValid)
{
返回重定向到操作(“添加记录页”,新建
{
身份证件
});
}
if(id==null)
{
返回重定向到操作(“添加记录页”,新建
{
身份证件
});
}
打破
案例“更新”:
ViewBag.Message=“更新”;
打破
}
_db.SaveChanges();
ViewBag.Message=“已保存”;
返回视图();
}

我发现我犯了什么错误。在控制器内部,我添加了返回视图();它返回空值。因此更改为返回重定向到操作(“MyAction”,new{id});而不是返回视图()

您得到了什么未处理的异常?发生在哪里?我投了反对票,因为缺少大量信息来回答这个问题。我强烈建议阅读。如果没有异常详细信息,就无法说明如何改进代码。在@if(Model.Count>0)获取NullReferenceException时,请确保视图顶部有正确的模型定义。看起来它应该类似于
@model List
,如果您有这样的功能,请确保将正确的模型返回到视图中,否则您会遇到更多问题!您的所有
EditorFor()
都毫无意义,甚至不会被发回—您的方法中甚至没有用于它的参数,但在任何情况下都不能使用
foreach
循环为集合生成表单控件(请参阅)