我最近遇到了 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。
这是设计使然吗?如果是 - 它是否记录在某处?如果不是 - 它可以被认为是一个错误吗?