2023-02-17 408
假设我有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; }
}
在视图中,我可以用
呈现部分
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
在部分中,我会做
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
但是,问题是,在我需要具有名称=”child.name”时,均呈现名称=”name”,以便为模型活页夹正常工作.或者,使用相同的部分视图呈现第二属性时,name =”child2.name”.
如何使我的部分视图自动识别所需的前缀?我可以将其作为参数传递,但这太不方便了.当我想要递归渲染时,这更糟糕.有没有一种方法可以通过前缀呈现部分视图,或者甚至更好,通过呼叫Lambda表达式进行自动重新调整,以便
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
将自动添加正确的”孩子”.生成的名称/id字符串的前缀?
我可以接受任何解决方案,包括3-RD Party View引擎和库 – 我实际上使用Spark View引擎(我”使用其宏解决问题)和MVCContrib,但没有找到那里的解决方案. XForms,InputBuilder,MVC V2 – 提供此功能的任何工具/洞察力都会很大.
目前我认为自己正在编码这一点,但它似乎浪费时间,我无法相信这个琐碎的东西已经没有实现.
可能存在许多手动解决方案,欢迎所有这些方法.例如,我可以强制我的部分基于IPARTIALVIEWMODEL {公共字符串前缀; T模型; }.但我宁愿喜欢一些现有/批准的解决方案.
更新:有一个类似的问题,没有答案 .
您可以通过以下方式扩展HTML Helper类:
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);
}
并只需在您的视图中使用它:
<%= Html.PartialFor(model => model.Child, "_AnotherViewModelControl") %>
,你会看到一切都好!
到目前为止,我正在搜索我发现最近的帖子的同一件事:
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;
StringBuilder htmlFieldPrefix = new StringBuilder();
if (helper.ViewData.TemplateInfo.HtmlFieldPrefix != "")
{
htmlFieldPrefix.Append(helper.ViewData.TemplateInfo.HtmlFieldPrefix);
htmlFieldPrefix.Append(name == "" ? "" : "." + name);
}
else
htmlFieldPrefix.Append(name);
var viewData = new ViewDataDictionary(helper.ViewData)
{
TemplateInfo = new System.Web.Mvc.TemplateInfo
{
HtmlFieldPrefix = htmlFieldPrefix.ToString()
}
};
return helper.Partial(partialViewName, model, viewData);
}
编辑:
默认的答案对于嵌套部分渲染不正确.只有在必要时,您需要将新前缀附加到旧前缀.最新答案中尚不清楚(:
以上所述是小编给大家介绍的ASP.NET MVC部分视图:输入名称的前缀,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34251.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态