在局部视图中形成 - 需要正确的答案

时间:2012-08-03 14:55:56

标签: asp.net-mvc-3 razor foreach model-binding asp.net-mvc-partialview

这是MVC3 form in partial view

的后续行动

虽然作者给出了解决问题的方法。我想找到一个正确的答案,为什么这不起作用。

我无法访问原始代码,但这是我的(所以我可以回答以下问题):

// main view (which is partial too)
    @foreach (AddingComponentVM sc in Model)
    {
        @Html.Partial("_SearchIngredientUpdate", sc);     
    }

//partial view
@using (Ajax.BeginForm("IngredientSearchUpdate", new { controller = "Recipe" }, ajxOpt, new { id = "addingWidgetForm" + Model.IngredientID }))
    {           
        @Html.TextBoxFor(model => model.IngredientID)
        @Model.IngredientID
    }

@ Model.IngredientID包含适当的值。但是文本框包含发送给控制器的模型的值(sic!),并且每个表单显然都是相同的。

[AjaxOnly]
public JsonResult IngredientSearchUpdate(
    AddingComponentVM dataIn,
    [ModelBinder(typeof(SearchOptionsBinder))] SearchOptions sessionSO)

如果签名中没有AddingComponentVM的操作调用上面相同的代码,则表单会正确呈现。

public PartialViewResult IngredientSearch([ModelBinder(typeof(SearchOptionsBinder))] SearchOptions sessionSO)

任何人都可以指出我这个奇怪(至少对我来说)行为的原因?谢谢!

1 个答案:

答案 0 :(得分:2)

因为这个原因我无法入睡,但这里的答案是:

使用PartialView或EditorTemplates无关紧要。如下所述:How to modify posted form data within controller action before sending to view?

“HTML Helpers在尝试查找密钥时使用以下顺序优先级:

  1. ViewData.ModelState字典条目
  2. 模型属性(如果强烈 打字视图。此属性是View.ViewData.Model)
  3. 的快捷方式
  4. ViewData字典条目“
  5. 因此,如果发布了任何值,则清除StateModel集合就足够了,然后可以通过使用的html helper来获取模型中的数据。这样就可以了:

    ModelState.Clear()