首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用HtmlFieldPrefix将数据发布到操作会产生空模型

使用HtmlFieldPrefix将数据发布到操作会产生空模型
EN

Stack Overflow用户
提问于 2019-06-24 03:43:27
回答 1查看 289关注 0票数 0

在我的应用程序中,我有几个模式窗口。它们中的每一个都采用相同的局部视图和相同的视图模型,但显示其他数据。为此,我生成了一个动态HtmlFieldPrefix as,这样就不会有多个同名的ID。示例:

代码语言:javascript
代码运行次数:0
运行
复制
@foreach (var product in Model.Products)
{
    string buyModalId = product.BuyModel.BindingPrefix;
    @await Html.PartialForAsync("_BuyForm", product.BuyModel, buyModalId)
}

BindingPrefix包含一个动态添加的字符串(例如buy-product-{ID})。在我看来,我还有一个隐藏的字段,它应该回发绑定前缀:

代码语言:javascript
代码运行次数:0
运行
复制
@Html.Hidden(nameof(Model.BindingPrefix), Model.BindingPrefix)

(来源:Asp.Net MVC Dynamic Model Binding Prefix)

然而,这不起作用,因为绑定前缀在POSTing时也是null。因此,我的控制器中的await TryUpdateModelAsync(model, model.BindingPrefix);失败。

Html.PartialForAsync方法的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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的警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 02:26:12

通过在我的模型中使用自定义模型绑定器找到了答案:

代码语言:javascript
代码运行次数:0
运行
复制
public override void BindModel(ModelBindingContext bindingContext)
{
    var providers = bindingContext.ValueProvider as System.Collections.IList;
    var formProvider = providers?.OfType<JQueryFormValueProvider>().FirstOrDefault();
    if (formProvider != null)
    {
        var (_, value) = formProvider.GetKeysFromPrefix(string.Empty).First();
        bindingContext.BinderModelName = value;
        bindingContext.FieldName = value;
        bindingContext.ModelName = value;
    }

    base.BindModel(bindingContext);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56727236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档