gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 部分 View : input name prefixes

转载 作者:行者123 更新时间:2023-12-02 07:37:23 24 4
gpt4 key购买 nike

假设我有像这样的 ViewModel

public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}

在 View 中我可以使用

渲染部分内容
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>

在部分我会做

<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>

但是,问题是两者都会呈现 name="Name",而我需要 name="Child.Name"才能使模型绑定(bind)器正常工作。或者,当我使用相同的部分 View 渲染第二个属性时,name="Child2.Name"。

如何让我的部分 View 自动识别所需的前缀?我可以将它作为参数传递,但这太不方便了。例如,当我想要递归渲染它时,情况会更糟。有没有一种方法可以使用前缀渲染部分 View ,或者更好的是,通过自动重新调整调用 lambda 表达式,以便

<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>

将自动添加正确的“子项”。生成的名称/ID 字符串的前缀?

我可以接受任何解决方案,包括第 3 方 View 引擎和库 - 我实际上使用 Spark View Engine(我使用其宏“解决”问题)和 MvcContrib,但没有在那里找到解决方案。 XForms、InputBuilder、MVC v2 - 任何提供此功能的工具/见解都会很棒。

目前我正在考虑自己编写代码,但这似乎是浪费时间,我不敢相信这个微不足道的东西还没有实现。

可能存在很多手动解决方案,并且欢迎所有这些解决方案。例如,我可以强制我的部分基于 IPartialViewModel { public string Prefix; T型; }。但我更喜欢一些现有/批准的解决方案。

更新:有一个类似的问题没有答案 here .

最佳答案

您可以通过以下方式扩展 Html 帮助器类:

using System.Web.Mvc.Html


public static MvcHtmlString PartialFor<TModel, TProperty>(this HtmlHelper<TModel> helper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string partialViewName)
{
string name = ExpressionHelper.GetExpressionText(expression);
object model = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model;
var viewData = new ViewDataDictionary(helper.ViewData)
{
TemplateInfo = new System.Web.Mvc.TemplateInfo
{
HtmlFieldPrefix = name
}
};

return helper.Partial(partialViewName, model, viewData);

}

只需在您的 View 中使用它,如下所示:

<%= Html.PartialFor(model => model.Child, "_AnotherViewModelControl") %>

你会发现一切都好!

关于asp.net-mvc - ASP.NET MVC 部分 View : input name prefixes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1488890/

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