MVC 2 TextBoxFor не работает вне вида - PullRequest
0 голосов
/ 07 марта 2011

Я хотел удалить повторяющийся код из моих форм просмотра 'edit', написав метод для генерации HTML-кода для имени поля, поля ввода и любых сообщений проверки.Вот пример кода представления по умолчанию, сгенерированного системой:

<div class="editor-label">
    <%: Html.LabelFor(model => model.dateAdded) %>
</div>
<div class="editor-field">
    <%: Html.TextBoxFor(model => model.dateAdded, String.Format("{0:g}", Model.dateAdded)) %>
    <%: Html.ValidationMessageFor(model => model.dateAdded) %>
</div>

И вот что я начал писать:

MvcHtmlString DataField(HtmlHelper h, Object m)
{
    string s=h.TextBoxFor(m => m.dateAdded);
}

Теперь я знаю, что это не будет работать должным образомэто только начало, но я получаю сообщение об ошибке "System.Web.Mvc.HtmlHelper" не содержит определения для TextBoxFor и метода расширения "TextBoxFor", принимающего первый аргумент типа System.Web.MvcHtmlHelper 'можно найти ".

1 Ответ

1 голос
/ 07 марта 2011

Вы пытаетесь написать собственный помощник HTML, который будет генерировать этот HTML?Я бы порекомендовал вам использовать пользовательский шаблон редактора, потому что у вас есть основная разметка.Таким образом, у вас может быть следующее частичное (~/Views/Shared/EditorTemplates/SomeViewModel.ascx):

<%@ Control 
    Language="C#"
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.SomeViewModel>" %>
<div class="editor-label">
    <%: Html.LabelFor(model => model.dateAdded) %>
</div>
<div class="editor-field">
    <%: Html.TextBoxFor(model => model.dateAdded, String.Format("{0:g}", Model.dateAdded)) %>
    <%: Html.ValidationMessageFor(model => model.dateAdded) %>
</div>

, а затем всякий раз, когда у вас есть строго типизированное представление SomeViewModel, просто:

<%= Html.EditorForModel() %>

или если у вас есть свойствотипа SomeViewModel:

<%= Html.EditorFor(x => x.SomePropertyOfTypeSomeViewModel) %>

, который будет отображать пользовательский шаблон редактора.

Что касается помощника, правильная подпись будет:

using System.Web.Mvc;
using System.Web.Mvc.Html;

public static class HtmlExtensions
{
    public static MvcHtmlString DataField(this HtmlHelper<SomeViewModel> htmlHelper)
    {
        return htmlHelper.TextBoxFor(x => x.dateAdded);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...