我的Html.Editor如何获得我的模型中未提供的值

时间:2016-06-02 15:30:40

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-5 html-helper model-binding

我在我的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如何获得他们的值,尽管在模型验证错误后呈现视图时,从主视图传递的模型将为空?

1 个答案:

答案 0 :(得分:1)

没有什么比ModelState中的内容更重要。 MVC使用来自各种地方的值,包括模型ViewBagViewDataRequest来填充ModelState。表单中显示的内容是ModelState中设置的内容,无论模型上实际设置了什么。