ASP.Net MVC 3自定义HTML帮助程序

时间:2012-12-23 06:34:12

标签: asp.net-mvc asp.net-mvc-3 razor razor-2

我正在使用ASP.Net MVC 3和Razor

如何为以下结构创建自定义HTML帮助器。这应该绑定到模型属性,我也应该将参数传递给label,span,input。

以下任何代码示例标记?

    <label class="field">
       <span class="td">User Name</span>
       <input type="text" name="UserName" class="highlight">
    </label>

更新

我在下面试过,但显示的文字没有显示我在模型中使用的文字

   <label for="login_field">
      <span class="td"> @Html.DisplayTextFor(m=>m.UserName)</span>
        @Html.TextBoxFor(model => model.UserName, 
           new { style = "width:21em", @class = "text" })

   </label>

我的视图模型位于下方并使用资源文件来获取文本

 using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using System.Web;

namespace MVC.ViewModel
{
    public class LoginViewModel
    { 
        [Required]
        [Display(Name = "UserName", ResourceType = typeof(Resources.Global))]
        public string UserName { get; set; }

    }
}

2 个答案:

答案 0 :(得分:1)

最好创建一个调用帮助器的函数。这应该会给你一个如何实现你的提示

@functions
{
public HelperResult CustomFormTextboxFor<TModel,TProperty>(HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
{
    var textBox= html.TextBoxFor(expression, new {@class = "highlight"});
    var modelsMetaDatas = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
    string displayValue = modelsMetaDatas.DisplayName ?? (metaData.PropertyName ??   ExpressionHelper.GetExpressionText(expression));
    return RenderCustomControl(textBox, displayValue);
}
}

@helper RenderCustomFormTextbox(MvcHtmlString input, string labeltext)
{
   <label class="field">
       <span class="td">@labeltext</span>
       @input
    </label> 
}

你视图中函数的调用看起来像这样。

@CustomFormTextboxFor(Html, model => model.FirstName)

希望这有帮助

答案 1 :(得分:0)

替换此

@Html.DisplayTextFor(m=>m.UserName)

@Html.LabelFor(m=>m.UserName)

有关 DisplayTextFor 的更多详情,请点击以下链接

What's the point of Html.DisplayTextFor()?