为ID而不是名称设置HtmlFieldPrefix

jay*_*agi 5 asp.net-mvc razor

设置ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix将添加所有name id属性.

我想知道是否有一种方法只是前缀id而不是name单独留下.

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

我们当前的解决方案是每次加载局部视图时生成一个唯一的数字,设置HtmlFieldPrefixitems[n](n生成的数字在哪里)以及我们采取行动来接收一个数组items(我们只需要接收一个).这为我们提供了一个全局唯一idname,可以通过模型绑定器进行解析.

但这感觉很难看.有什么建议?

Nat*_*ate 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)
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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