asp.net-mvc – 用于字符串的ASP.NET MVC显示模板用于整数
发布时间:2020-05-24 15:08:16 所属栏目:asp.Net 来源:互联网
导读:我最近遇到了ASP.NET MVC显示模板的问题.说这是我的模特: public class Model{ public int ID { get; set; } public string Name { get; set; }} 这是控制器: public class HomeController : Controller{ public ActionResult
|
我最近遇到了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 – 在Page_Load之前处理事件
- asp.net – Request.Url.AbsoluteUri和重写的URL
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net – 配置转换和“TransformXml任务失败”错误消息
- asp.net-mvc-4 – 重载Html.LabelFor以添加’后缀’的简单方
- ASP.net会话状态服务信息
- asp.net-mvc – ASP.NET MVC会话状态
- asp.net – 如何配置IIS以便在连接到SQL Server时使用用户的
- asp.net-mvc – 属性路由和本地化问题
- asp.net – 我可以在Visual Studio 2008中使用MVC3吗?
推荐文章
站长推荐
- asp.net-mvc – RazorEngine:不能使用Html.Raw
- asp.net-mvc-3 – 重定向与RedirectToRouteResul
- asp.net-mvc – ASP.NET MVC应用程序中的“坏二进
- iis-7 – 主域和可信域之间的信任关系失败
- asp.net-mvc-3 – MVC EditorFor命名模板的问题
- asp.net-mvc – MVC3验证 – 需要一个组
- ASP.NET路由 – 自定义路由完全跳过Global.asax中
- asp.net-mvc – 如何通过MVC Azure AD身份验证从
- asp.net-web-api – 使用OWIN SelfHost和Windows
- asp.net-mvc-4 – 如何在ASP.NET MVC 4中从数据库
热点阅读
