asp.net-mvc – 用于字符串的ASP.NET MVC显示模板用于整数
发布时间:2020-12-16 04:07:54 所属栏目:asp.Net 来源:网络整理
导读:我最近遇到了ASP.NET MVC显示模板的问题.说这是我的模特: public class Model{ public int ID { get; set; } public string Name { get; set; }} 这是控制器: public class HomeController : Controller{ public ActionResult Index() { return View(new M
我最近遇到了ASP.NET MVC显示模板的问题.说这是我的模特:
public class Model { public int ID { get; set; } public string Name { get; set; } } 这是控制器: public class HomeController : Controller { public ActionResult Index() { return View(new Model()); } } 这是我的看法: <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<DisplayTemplateWoes.Models.Model>" %> <!DOCTYPE html> <html> <head runat="server"> <title>Index</title> </head> <body> <div> <%: Html.DisplayForModel() %> </div> </body> </html> 如果我出于某种原因需要所有字符串的显示模板,我将创建一个String.ascx局部视图,如下所示: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> <%: Model %> (<%: Model.Length %>) 这是问题 – 在运行时抛出以下异常: 似乎String.ascx用于Model类的整数和字符串属性.我希望它只用于字符串属性 – 毕竟它被命名为String.ascx而不是Object.ascx或Int32.ascx. 这是设计的吗?如果是的话 – 是否在某处记录了?如果不是 – 它可以被视为一个错误吗? 解决方法
这似乎是设计上的.您将不得不使字符串模板更通用.字符串模板作为每个没有自己模板的非复杂模型的默认模板.
字符串的默认模板(FormattedModelValue是object): internal static string StringTemplate(HtmlHelper html) { return html.Encode(html.ViewContext.ViewData.TemplateInfo.FormattedModelValue); } 模板选择如下所示: foreach (string templateHint in templateHints.Where(s => !String.IsNullOrEmpty(s))) { yield return templateHint; } // We don't want to search for Nullable<T>,we want to search for T (which should handle both T and Nullable<T>) Type fieldType = Nullable.GetUnderlyingType(metadata.RealModelType) ?? metadata.RealModelType; // TODO: Make better string names for generic types yield return fieldType.Name; if (!metadata.IsComplexType) { yield return "String"; } else if (fieldType.IsInterface) { if (typeof(IEnumerable).IsAssignableFrom(fieldType)) { yield return "Collection"; } yield return "Object"; } else { bool isEnumerable = typeof(IEnumerable).IsAssignableFrom(fieldType); while (true) { fieldType = fieldType.BaseType; if (fieldType == null) break; if (isEnumerable && fieldType == typeof(Object)) { yield return "Collection"; } yield return fieldType.Name; } } 因此,如果您只想为字符串创建模板,您应该这样做(String.ascx): <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<object>" %> <% var model = Model as string; %> <% if (model != null) { %> <%: model %> (<%: model.Length %>) <% } else { %> <%: Model %> <% } %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何在Gridview中绑定DropDownList,而不是从gri
- js_jquery_创建cookie有效期问题_时区问题
- asp.net-mvc – 如何使用WIX在IIS 6上安装ASP.NET MVC 3应用
- Asp.net验证网络文件地址是否有效的方法
- asp.net – global.asax断点未命中
- ASP.NET Eval时间格式化
- asp.net-mvc – 创建/编辑父和子窗体MVC
- asp.net-mvc – Mvc – 在会话中存储列表,然后检索其值
- asp.net – 在web.config中创建一个字符串并在web.api中使用
- asp.net-mvc – Steve Sanderson的BeginCollectionItem帮助
推荐文章
站长推荐
- asp.net – 应用程序池和工作进程线程之间的关系
- asp.net-core – 外部包中的模型显示在swagger文
- asp.net-core – 删除继承的ASP.NET Core appset
- asp.net – 使用@@ identity检索PK
- asp.net-mvc – ASP.net MVC – 我可以告诉Html.
- asp.net-core – .NET Core与ASP.NET Core
- linq – 将表达式树从一种类型转换为另一种具有复
- 如果在BackgroundWorker运行过程中关闭窗体…
- Asp.net webForm设置允许表单提交Html的方法
- asp.net – 处理原始HTTP请求内容
热点阅读