我在我的asp.net mvc-4网络应用程序中面临一个奇怪的问题,因为似乎Html.Editor
非常聪明,导致我对它的实际工作方式感到困惑。
现在我在我的视图中有以下内容,其中我有一个呈现局部视图的主视图,如下所示: -
@model TS.ViewModels.ServerJoin
using (Html.BeginForm())
{
@Html.ValidationSummary(true)
@Html.Partial("_PMCreateAccount",Model.createAccount.operation.Details.ACCOUNTLIST.ToList())
}
这是局部视图: -
@model IList<TS.ViewModels.ACCOUNTLIST>
for(int i2 = start; i2 < count ; i2++) {
<div>
<span class="f">@Html.DisplayName("["+i2.ToString()+"].ACCOUNTNAME") </span>@Html.Editor("["+i2.ToString()+"].ACCOUNTNAME")
<span class="f">@Html.DisplayName("["+i2.ToString()+"].PASSWORD") </span>@Html.Editor("["+i2.ToString()+"].PASSWORD")
<span class="f">@Html.DisplayName("["+i2.ToString()+"].NOTES") </span>@Html.Editor("["+i2.ToString()+"].NOTES") </div>
}
和Post动作方法如下所示: -
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ServerJoin sj,List<ACCOUNTLIST> al)
{
if(ModelState.IsValid)
{
}
return View(sj);
}
现在让我说提交视图,然后是sj&amp; al会得到正确的值..但是假设模型状态错误被提出,然后我的主视图将再次呈现..现在令我困惑的是,部分视图中的Html.Editor
能够读取他们的原始值没有在我的帖子操作方法中定义: -
sj.createAccount.operation.Details.ACCOUNTLIST = al;
我的意思是在我的主视图中,我将以下内容传递给局部视图: -
@Html.Partial("_PMCreateAccount",Model.createAccount.operation.Details.ACCOUNTLIST.ToList())
并且Model.createAccount.operation.Details.ACCOUNTLIST.ToList()
将为空,以防在模型验证错误后呈现视图...我认为Html.Editor
将无法读取其原始值,除非我明确指定这在post动作方法中: -
sj.createAccount.operation.Details.ACCOUNTLIST = al;
但事实并非如此?所以任何人都可以建议我的Html.Editor
如何获得他们的值,尽管在模型验证错误后呈现视图时,从主视图传递的模型将为空?
答案 0 :(得分:1)
没有什么比ModelState
中的内容更重要。 MVC使用来自各种地方的值,包括模型ViewBag
,ViewData
和Request
来填充ModelState
。表单中显示的内容是ModelState
中设置的内容,无论模型上实际设置了什么。