Шаблон редактора ASP.NET MVC 2 для типов значений, int - PullRequest
6 голосов
/ 03 августа 2009

Я хочу создать шаблон редактора MVC 2 для типа значения, т.е. int, кто-нибудь делал это с предварительным просмотром 1 бита?

Большое спасибо

Ответы [ 4 ]

15 голосов
/ 11 октября 2009

Будет ли работать ответ Ника Кларка, когда вы отправляете значения при обратной передаче?

В предварительном просмотре 2 MVC2 вызов Html.Textbox ("abc", Model.ToString ()) отобразит текстовое поле с добавлением «.abc» к имени, например,

<input id="StartDate_abc" name="StartDate.abc" type="text" value="02 Feb 09" />

, что вызовет проблемы при обратной передаче и попытке UpdateModel ().

Я сделал шаблон редактора для DateTime, у меня работает следующее:

/ Views / Shared / EditorTemplates / DateTime.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>
<%= Html.TextBox(String.Empty, Model.ToString("dd MMM yy")) %>

или, чтобы использовать DatePicker jQuery для всех ваших DateTimes добавьте ссылку на jQuery и jQueryUI либо на главную страницу, либо на представление, содержащее вызов EditorFor.

/ Views / Shared / EditorTemplates / DateTime.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>
<%= Html.TextBox("", Model.ToString("dd MMM yy")) %>
<script type="text/javascript">
    $("#<%= ViewData.ModelMetadata.PropertyName %>").datepicker({ dateFormat: 'dd M y' });
</script>

Обновление: ASP.NET MVC3 с использованием синтаксиса Razor:

@model System.DateTime
@Html.TextBox("",  Model.ToString("dd MMM yy"))
<script type="text/javascript">
    $("#@ViewData.ModelMetadata.PropertyName").datepicker({ dateFormat: 'dd M y' });
</script>

И чтобы использовать все, что вам нужно в вашем представлении:

@Html.EditorFor(model => model.DueDate)

Матф

4 голосов
/ 03 августа 2009

Я еще не пробовал превью 1, но они сделали то, что вы просите в этом канале 9 видео:

http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-ASPNET-MVC-2-Preview-1-with-Phil-Haack-and-Virtual-Scott/

Они делают и DisplayFor, и EditorFor, запускается около 2 минут.

- Edit -

Для типа значения, т. Е. Int, я смог заставить его работать таким же образом.

Создайте модель для передачи на мой взгляд:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        HomeModel model = new HomeModel();
        model.message = "Welcome to ASP.NET MVC!";
        model.number = 526562262;
        model.Date = DateTime.Now;

        return View(model);
    }
}

public class HomeModel
{
    public string message { get; set; }

    public int number { get; set; }

    public DateTime Date { get; set; }
}

Представление ссылки на модель с использованием новой логики шаблона:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<HomeModel>" %>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<p>
    <% Html.EditorFor(c => c.message); %>
</p>
<p>
    <% Html.EditorFor(c => c.number); %>
</p>
<p>
    <% Html.EditorFor(c => c.Date); %>
</p>

Затем создайте шаблон для каждого из типов, например. Int32:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
Editor For My Int32: <%= Html.TextBox("abc", Model.ToString())%>

Я поместил это в Views \ Shared \ EditorTemplates \ Int32.ascx

2 голосов
/ 26 апреля 2010

Я написал в блоге о том, как это сделать, создавая многократно используемые шаблоны в MVC 2.

Мой пост также объясняет связь между TemplateInfo и шаблонами.

1 голос
/ 12 октября 2011

Я нашел в блоге Брэда Уилсона лучшие примеры и объяснения. Часть-3 серии посвящена конкретно типам значений (String, decimal, Int32).

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...