是否有可能通过属性做同样的事情?

时间:2012-06-25 10:14:05

标签: c# asp.net-mvc-3

我遇到了问题,我在这个地方描述了How create UIHit YesNoNull?

我通过创建帮助器解决了这个问题:

public static MvcHtmlString YesNoNull(this HtmlHelper helper, string name)
{
    return YesNoNull(helper, name, false);
}

public static MvcHtmlString YesNoNull(this HtmlHelper helper, string name, bool selected)
{
    var builder = new StringBuilder(500);
    builder.Append(string.Format("<input id='checkbox_{0}' type='checkbox' />Есть", name));
    builder.Append("<script type=\"text/javascript\">$(function () {");
    builder.Append(string.Format("$('#checkbox_{0}').click(function () {{", name));
    builder.Append(@"var checked = $(this).attr('checked');if (checked != undefined) {");
    builder.Append(string.Format("$('#{0}').show();}}", name));
    builder.Append(string.Format("else {{$('#{0}').hide();}}  }});", name));
    builder.Append(string.Format("$('#checkbox_{0}').attr('checked', {1});", name, selected.ToString().ToLower())); 
    builder.Append(string.Format("var checked = $('#checkbox_{0}').attr('checked');if (checked != undefined){{ $('#{0}').show(); }}else{{$('#{0}').hide();}}", name));
    builder.Append("})</script>");




    return new MvcHtmlString(builder.ToString());
}

我这样使用它:

@Html.YesNoNull("VenueUrl", false)
@Html.EditorFor(model => model.VenueUrl)

是否可以做同样的事情,但不使用助手和唯一的设计:

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

1 个答案:

答案 0 :(得分:1)

我相信你可以在名为~/Views/Shared/EditorTemplates/的{​​{1}}中创建一个模板并在那里添加标记。

每当您在视图中调用YesNoNull.cshtml时,它会在@Html.EditorFor~/Views/Shared/EditorTemplates中查找与模型类型匹配的模板。

因此,对于字符串,它将采用String.cshtml,对于DateTime,它将采用DateTime.cshtml,依此类推。如果您定义了UIHint属性,它应该将您称为UIHint的任何内容作为模板