【发布时间】:2019-06-23 19:43:27
【问题描述】:
在我的应用程序中,我有几个模态窗口。它们中的每一个都采用相同的局部视图和相同的视图模型,但显示其他数据。为此,我生成了一个动态的HtmlFieldPrefix,因为它没有多个同名的 ID。示例:
@foreach (var product in Model.Products)
{
string buyModalId = product.BuyModel.BindingPrefix;
@await Html.PartialForAsync("_BuyForm", product.BuyModel, buyModalId)
}
BindingPrefix 包含一个动态添加的字符串(例如buy-product-{ID})。在我看来,我还有一个隐藏字段,应该将绑定前缀发布回来:
@Html.Hidden(nameof(Model.BindingPrefix), Model.BindingPrefix)
(来源:Asp.Net MVC Dynamic Model Binding Prefix)
但是,这不起作用,因为在 POST 时绑定前缀也是 null。因此,我的控制器中的 await TryUpdateModelAsync(model, model.BindingPrefix); 失败了。
Html.PartialForAsync 方法的代码如下:
public static Task<IHtmlContent> PartialForAsync(this IHtmlHelper htmlHelper, string partialViewName, object model, string prefix)
{
var viewData = new ViewDataDictionary(htmlHelper.ViewData);
var htmlPrefix = viewData.TemplateInfo.HtmlFieldPrefix;
viewData.TemplateInfo.HtmlFieldPrefix += !Equals(htmlPrefix, string.Empty) ? $".{prefix}" : prefix;
var part = htmlHelper.PartialAsync(partialViewName, model, viewData);
return part;
}
(来源:MVC 6 VNext how to set HtmlFieldPrefix?)
我错过了什么?为什么我的模型还是null?删除绑定前缀时,绑定可以完美运行 - 但浏览器会抛出有关多个相同 ID 的警告。
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc