虽然作者给出了解决问题的方法。我想找到一个正确的答案,为什么这不起作用。
我无法访问原始代码,但这是我的(所以我可以回答以下问题):
// 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)
任何人都可以指出我这个奇怪(至少对我来说)行为的原因?谢谢!
答案 0 :(得分:2)
因为这个原因我无法入睡,但这里的答案是:
使用PartialView或EditorTemplates无关紧要。如下所述:How to modify posted form data within controller action before sending to view?
“HTML Helpers在尝试查找密钥时使用以下顺序优先级:
因此,如果发布了任何值,则清除StateModel集合就足够了,然后可以通过使用的html helper来获取模型中的数据。这样就可以了:
ModelState.Clear()