ASP. Шаблон отображения .NET MVC для строк используется для целых чисел

Недавно я столкнулся с проблемой с шаблонами отображения 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.

Это намеренно? Если да - это где-то задокументировано? Если нет - может ли это считаться ошибкой?

7
задан Atanas Korchev 18 February 2011 в 08:04
поделиться