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;