2014-01-13 2 views
0

Я работаю над проектом в течение каждого текстового поля в представлении я имею парованиеКак я могу позвонить @ Html.TextBoxFor в файле .cs

<div class="field-box"> 
    <label>Titlu</label> 
    <div class="col-md-7"> 
     @Html.TextBoxFor(model => model.Name, new { @class = "form-control inline-input" }) 
    </div> 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 

Я хочу написать собственный помощник, который будет выведите это для меня, но я понятия не имею, как вызвать @ Html.TextBoxFor, когда я не вижу.

Любая помощь очень ценится. Благодаря

Update Я нашел это Using HtmlHelper in a Controller, но это выглядит ужасно там должен быть лучший способ

+2

Там нет другого пути непосредственно. Зачем вам это нужно делать из бэкэнда? Вероятно, вы ошибетесь, если вам нужно вызвать его за пределами взглядов. – Karhgath

+0

@Karhgath, потому что я не знаю лучшего способа сократить html, который я вставил, или найти способ сохранить его для повторного использования. Это много копировать пасту. У меня это с разными переменными примерно в 20 местах – trebor

ответ

6

Как так:

public static class CustomHtmlHelper { 

    public static MvcHtmlString MyFieldBox<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, String title) { 

     StringBuilder sb = new StringBuilder(); 
     sb.AppendLine("<div class=\"field-box\">"); 
     sb.AppendLine("<div class=\"field-box">\"); 
     sb.AppendLine("<label>{0}</label>", title); 
     sb.AppendLine("<div class=\"col-md-7\">"); 
     sb.AppendLine(htmlHelper.TextBoxFor(expression, new { @class = "form-control inline-input" })); 
     sb.AppendLine("</div>"); 
     sb.AppendLine(htmlHelper.ValidationMessageFor(expression); 
     sb.AppendLine("</div>"); 
     return new MvcHtmlString(sb.ToString()); 
    } 

} 

Использование:

<%= Html.MyFieldBox(m => m.Name, "Name") %> 
+0

Именно то, что я искал, нужно исправить ошибку просмотра, дать вам обновленную информацию и пометить ее как правильную. – trebor

+0

Я не могу для жизни меня импортировать то, что мне нужно, чтобы сделать выражение > выражение compile вы можете помочь. Он говорит, что он не может решить TProperty, если есть импорт, который я ошибался, я не знаю, что. Спасибо – trebor

+1

Вам нужно в определении функции, я просто добавил это, попробуйте сейчас ... –

1

Другой вариант, если он используется только в одной точке зрения, является использование синтаксиса бритвы HtmlHelper.

Вы определяете помощника, как это:

@helper MyTextBoxFor(System.Linq.Expressions.Expression<Func<ViewModelType, object>> expression) 
{ 
    <div class="field-box"> 
     <label>Titlu</label> 
     <div class="col-md-7"> 
      @Html.TextBoxFor(expression, new { @class = "form-control inline-input" }) 
     </div> 
     @Html.ValidationMessageFor(expression) 
    </div> 
} 

, а затем использовать его как это:

@MyTextBoxFor(m => m.Name) 
+0

Спасибо за помощь, уже отметили другую как правильную. Будет ли этот помощник доступен во всем моем проекте или просто в представлении, в котором он определен? – trebor

+1

Только один вид. Возможно, есть способ поделиться им, поставив его в макет, я не уверен. Даже если вы это сделали, большое ограничение заключается в том, что оно не поддерживает дженерики ... так что это будет работать только для одной модели представления.Я думаю, это действительно полезно, если вы используете один и тот же фрагмент в одном и том же представлении. –

+1

Вот как вы можете поделиться им: http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx, но тем не менее отсутствие общей поддержки ограничивает его полезность в этом случае. –

0

Вы можете попробовать редактор шаблонов, если это работает для вас

+0

Привет, если шаблоны редактора совпадают с шаблонами t4, они не так, как я хочу, если они что-то другое, вы можете предоставить ссылку – trebor

+0

HI Toby. 1) Добавить View под представлениями -> Shared -> EditorTemplates 2) Назовите те же, что и в Viewmodel/Model (создайте новую модель ViewModel/Model, скажем, manNameVM для этого содержимого HTML и добавьте ее с помощью @model) 3) Вот и все , используйте этот шаблон как @ html.EditorFor (m => m.personNameVM), где бы вы ни хотели – DeepakKhetwal

Смежные вопросы