我最近遇到了 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 %>)
这就是问题 - 在运行时抛出以下异常:“传入字典的模型项的类型为'System.Int32',但此字典需要类型为'System.String'的模型项”
似乎 String.ascx 用于 Model 类的整数和字符串属性。我希望它只用于字符串属性 - 毕竟它被命名为 String.ascx 而不是 Object.ascx 或 Int32.ascx。
这是设计的吗?如果是的话 - 它是否在某处记录?如果不是 - 它可以被视为一个错误吗?
1 回答
这似乎是设计上的。您必须使字符串模板更通用。字符串模板作为每个没有自己模板的 non-complex 模型的默认模板。
字符串的默认模板(FormattedModelValue 是 object):
模板选择如下所示:
因此,如果您只想为字符串创建模板,您应该这样做(String.ascx):