C# MVC3中视图和局部视图的模型相同

C# MVC3中视图和局部视图的模型相同,c#,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net Mvc,Asp.net Mvc 3,Razor,我有两个功能加载和编辑。记录被加载到WebGrid中,我使用弹出窗口进行编辑。但对于这两个函数,我使用相同的模型。这就是我出错的地方 加载记录时工作正常,使用“编辑”时工作正常,但当我尝试保存编辑并返回模型时,我遇到了错误 //主视图 @model AdhiaRecruitment.Models.CandidateDetailsModel @{ ViewBag.Title = "CandidateDetails"; Layout = "~/Views/Shared/_Layout

我有两个功能加载和编辑。记录被加载到
WebGrid
中,我使用弹出窗口进行编辑。但对于这两个函数,我使用相同的模型。这就是我出错的地方

加载记录时工作正常,使用“编辑”时工作正常,但当我尝试保存编辑并返回
模型时,我遇到了错误

//主视图

@model AdhiaRecruitment.Models.CandidateDetailsModel
@{
    ViewBag.Title = "CandidateDetails";
    Layout = "~/Views/Shared/_Layout.cshtml";

    <style type="text/css">
        .grid
        {
            width: 100%;
        }
    </style>
}
<h2>
    CandidateDetails</h2>
<div style="padding: 7px 0;">
    <input type="button" value="Add New Product" onclick="OpenCreatePopup()" />
</div>
<div style="width: 100%;">
    @{
        string template = string.Format("<text><img src='/img/edit.png' title='Edit' onclick='EditProduct({0})' /><img src='/img/delete.png' title='Delete' onclick='DeleteProduct({0})' /></text>", Model.CDId);

        WebGrid grid = new WebGrid(Model.LoadAllCandidateDetails());
        @grid.GetHtml(
         tableStyle: "grid",
         fillEmptyRows: false,
         headerStyle: "gvHeading",
         alternatingRowStyle: "gvAlternateRow",
         rowStyle: "gvRow",
         footerStyle: "gvFooter",

         mode: WebGridPagerModes.All,
         firstText: "<< First",
         previousText: "< Prev",
         nextText: "Next >",
         lastText: "Last >>",
         columns: new[] {
         grid.Column("CDId", "ID"), 
         grid.Column("Name", "Name"),   
         grid.Column("Gender", "Gender"),                        
         grid.Column("", header: "Actions", canSort:false,
            format: @<text>
        @Html.Raw("<img src='/Images/edit-icon.png' alt='Edit' title='Edit' onclick='EditProduct(" + item.CDId + ")'  />")
        @Html.Raw("<img src='/Images/delete-icon.png' alt='Delete' title='Delete' onclick='DeleteProduct(" + item.CDId + ")'  />")
        </text>
        )    

     })    
    }
</div>
<div id="DivToAppendPartialView">
</div>
<script type="text/javascript">

        var ph = $("#DivToAppendPartialView");
        ph.dialog({
            modal: true,
            width: 560,
            height: 560,
            title: "Edit Candidate",
            resizable: false,
            autoOpen: false
        });

    function EditProduct(cid) {

        ph.load("/CandidateDetails/EditCandidateDetails?candidateid=" + cid, function () {
            ph.dialog('open');

        });
    }
</script>
单击“保存”后,将加载
模型
,当
性别列表
加载其属性时,将抛出空错误

我不确定我写的
MVC
的过程是否正确。我是否必须创建一个单独的
模型
进行编辑?如果是,例如,如果我的应用程序中有15个编辑功能,那么我必须创建30个模型


请提供帮助。

在“编辑部分”视图中,您没有性别下拉菜单,因此当控制器方法上发生模型绑定时,性别始终为
null

如果不希望用户更改/编辑性别,则可以使用隐藏字段将当前性别发送回服务器

@Html.HiddenFor(model => model.Gender)
如果要使性别可编辑,则需要一个下拉菜单

@Html.DropDownListFor(model => model.Gender, Model.GenderList())
编辑: 要解决空性别问题,只需进行空检查,并将其默认为:

Gender = Gender == null ? "male" : Gender; //Set default if null
var selected = lstGender.Where(x => x.Text == Gender).First();
            Gender = selected.Value;

它就在那里。很抱歉错过了。我的问题是,我可以为这两种功能使用相同的模型吗?如果是/否,如何确定?错误来自模型。此行没有空检查:
var selected=lstGender.Where(x=>x.Text==Gender.First()很难确定是哪个部分导致了空异常。如果性别为空,则会导致问题。如果性别不匹配,则
.First()
将抛出null。您可以尝试
.FirstOrDefault()
回答您的问题,具体来说,您可以使用相同的模型。我的性别为空。那么,验证是我摆脱这个错误的唯一方法吗?或者模型/控制器/视图中是否有任何更改?
@Html.HiddenFor(model => model.Gender)
@Html.DropDownListFor(model => model.Gender, Model.GenderList())
Gender = Gender == null ? "male" : Gender; //Set default if null
var selected = lstGender.Where(x => x.Text == Gender).First();
            Gender = selected.Value;