Недавно я столкнулся с проблемой с шаблонами отображения 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 - в конце концов, он называется String.ascx, а не Object.ascx или Int32.ascx.
Это намеренно? Если да - это где-то задокументировано? Если нет - может ли это считаться ошибкой?