为ID而不是名称设置HtmlFieldPrefix

时间:2014-07-09 15:59:29

标签: asp.net-mvc razor

设置ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix会预先添加所有name id属性。

我想知道是否有办法只为id添加前缀并单独留下name

场景是这样的:AJAX在页面上多次加载局部视图。我们使用的JavaScript库需要使用id,但我们也希望能够发布表单(因此name需要匹配服务器模型。)

我们当前的解决方案是每次加载部分视图时生成唯一编号,将HtmlFieldPrefix设置为items[n](其中n是生成的编号)以及我们的操作收到一组items(我们只需要收到一个)。这为我们提供了全局唯一的idname,可以通过模型绑定器进行解析。

但是,这感觉很难看。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我和你一样有同样的问题。

@{ ViewData.TemplateInfo.HtmlFieldPrefix = "Prefix"; }
@using(Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    @Html.TextBoxFor(m => m.MerchantAccount.MerchantName, new { maxlength = 29, size = 35 })<br />
    @Html.ValidationMessageFor(m => m.MerchantAccount.MerchantName)
}

首先,我的主意是:在页面加载时使用jQuery删除所有名称的不需要的前缀。

$('[id*="Prefix_']).each(function(i, e) {...

我们在这里建议我们最终做了什么:https://stackoverflow.com/a/1318342/4946681

基本上,在控制器上,您可以说明要剥离的前缀(通过在方法签名中指定绑定前缀),并自动为您完成。

现在我们可以拥有我们的ID前缀蛋糕,并且也可以吃掉(绑定)它们!