Asp.net mvc 3 部分视图中的形式-需要正确的答案

Asp.net mvc 3 部分视图中的形式-需要正确的答案,asp.net-mvc-3,razor,foreach,model-binding,asp.net-mvc-partialview,Asp.net Mvc 3,Razor,Foreach,Model Binding,Asp.net Mvc Partialview,这是一个后续行动 尽管作者提出了解决这个问题的办法。我想找到一个正确的答案,为什么这不起作用 我没有访问原始代码的权限,但这是我的(因此我可以回答以下问题): @Model.IngreditId包含正确的值。但文本框包含发送给控制器的模型值(原文如此!),显然每个表单的值都是相同的 [AjaxOnly] public JsonResult IngredientSearchUpdate( AddingComponentVM dataIn, [ModelBinder(typeof(S

这是一个后续行动

尽管作者提出了解决这个问题的办法。我想找到一个正确的答案,为什么这不起作用

我没有访问原始代码的权限,但这是我的(因此我可以回答以下问题):

@Model.IngreditId包含正确的值。但文本框包含发送给控制器的模型值(原文如此!),显然每个表单的值都是相同的

[AjaxOnly]
public JsonResult IngredientSearchUpdate(
    AddingComponentVM dataIn,
    [ModelBinder(typeof(SearchOptionsBinder))] SearchOptions sessionSO)
如果没有在签名中添加ComponentVM的操作调用上述相同的代码,则表单将正确呈现

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

有人能告诉我这种奇怪(至少对我来说)行为的原因吗?谢谢

因此我无法入睡,但答案如下:

使用PartialView还是EditorTemplates并不重要。如下所述:

“HTML帮助程序在尝试查找密钥时使用以下优先顺序:

  • ViewData.ModelState字典条目
  • 模型属性(如果是强 类型化视图。此属性是view.ViewData.Model的快捷方式)
  • ViewData字典条目“
  • 所以,如果发布了任何值,则清除StateModel集合就足够了,然后可以使用html助手从模型中提取数据。这将实现以下目的:

    ModelState.Clear()
    

    我更喜欢使用EditorTemplates来呈现此类表单,而不是局部视图。Partials有时会表现得很奇怪(虽然如果你知道它是如何工作的,这是合乎逻辑的),并且会有意想不到的行为。非常好而且有趣的建议。我仍然想知道为什么它能像他们那样工作!ThanksI用EditorTemplates实现了这一点,同样的事情也发生了。与POST发送的数据发生冲突。显然,TextBoxFor(etc)就是这样工作的。它们首先在ViewData、ViewBag中搜索值,然后在model中搜索值。我仍然需要帮助。
    ModelState.Clear()