gpt4 book ai didi

c# - ASP.NET MVC 字段 id 生成,AJAX 加载的部分 View 创建非唯一名称

转载 作者:太空狗 更新时间:2023-10-29 19:44:08 24 4
gpt4 key购买 nike

我们使用 ASP.NET MVC 的 HTML 帮助器来生成表单,因此表单字段的名称也由这些 HTML 帮助器生成。

每当我通过 AJAX 将局部 View 加载到我的当前页面(例如,加载到模态对话框中)时,如果该局部 View 的模型包含一个与原始 View 中的某些其他字段同名的字段,我就会遇到问题模型(因为 ASP.NET MVC 生成相同的 ID)。

有什么方法可以告诉局部 View 使用特定前缀呈现其字段(以这种方式,以后的模型绑定(bind)可以理解这些前缀名称)?

目前,我们将部分 View 模型中的字段重命名为“PartialDateOfBirth”,以不干扰原始页面的模型“DateOfBirth”,但是如果您通过 AJAX 将相同的部分 View 多次加载到页面中,这很糟糕并且不起作用。 ..

该问题的任何最佳实践解决方案?

最佳答案

这是我会做的:

在您的项目中将其另存为 HtmlPrefixScopeExtensions.cs

public static class HtmlPrefixScopeExtensions
{
public static IDisposable BeginPrefixScope(this HtmlHelper html, string htmlFieldPrefix)
{
return new HtmlFieldPrefixScope(html.ViewData.TemplateInfo, htmlFieldPrefix);
}

internal class HtmlFieldPrefixScope : IDisposable
{
internal readonly TemplateInfo TemplateInfo;
internal readonly string PreviousHtmlFieldPrefix;

public HtmlFieldPrefixScope(TemplateInfo templateInfo, string htmlFieldPrefix)
{
TemplateInfo = templateInfo;
PreviousHtmlFieldPrefix = TemplateInfo.HtmlFieldPrefix;
TemplateInfo.HtmlFieldPrefix = htmlFieldPrefix;
}

public void Dispose()
{
TemplateInfo.HtmlFieldPrefix = PreviousHtmlFieldPrefix;
}
}
}

然后改变你的观点,例如:

<div class="content">
<div>
@Html.EditorFor(model => model.Name)
</div>
<div>
@Html.EditorFor(model => model.Population)
</div>
</div>

收件人:

@using (Html.BeginPrefixScope("Country"))
{
<div class="content">
<div>
@Html.EditorFor(model => model.Name)
</div>
<div>
@Html.EditorFor(model => model.Population)
</div>
</div>
}

最后但同样重要的是,不要忘记在与 HtmlPrefixScopeExtensions.cs 的位置匹配的 View 中包含一个 using 语句,例如:

@using YourNamespace.Helpers

或将正确的命名空间添加到 Views/Web.config(这是迄今为止推荐的选项,您只需执行一次!):

<namespaces>
<add namespace="System.Web.Helpers" />
......
<add namespace="YourNamespace.Helpers" />
</namespaces>

现在:字段的名称将是例如“Country.Name”

然后您的帖子中必须有匹配的名称,例如:

[HttpPost]
public ActionResult SaveCountry(Country country)
{
// save logic
return View();
}

致谢:我剥离了 Steve Sanderson 精彩的 BeginCollectionItem 类

关于c# - ASP.NET MVC 字段 id 生成,AJAX 加载的部分 View 创建非唯一名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18866572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com