【发布时间】:2015-08-26 00:13:32
【问题描述】:
我有以下几点:
@model Pharma.ViewModels.SearchBoxViewModel
<div class="smart-search">
@using (Html.BeginForm("Index", "Search", FormMethod.Get, new { @class = "form-horizontal", role = "form" }))
{
<div class="form-group">
<div class="hidden-xs- col-sm-1 col-md-1 col-lg-1 text-right">
@Html.LabelFor(m => m.SearchPhrase, new { @class = "control-label" })
</div>
<div class="col-xs-8 col-sm-8 col-md-9 col-lg-10">
@Html.TextBoxFor(m => m.SearchPhrase, new { @class = "form-control" })
</div>
<div class="col-xs-4 col-sm-3 col-md-2 col-lg-1">
<input type="submit" value="Search" class="btn btn-default" />
</div>
</div>
}
</div>
如您所见,这是在创建一个输入元素。
传递给视图的视图模型包含以下内容:
public class SearchBoxViewModel
{
[Required]
[Display(Name = "Search")]
public string SearchPhrase { get; set; }
}
目前输入元素包含一个值为“SearchPhrase”的名称属性,但我希望该值只是“q”而不重命名属性。
我更喜欢允许我调用 TextBoxFor 但无需提供 Name 属性的扩展,以便自定义属性以某种方式自动将 Name 属性的值设置为自定义属性中指定的值。
以下是我的意思的一个例子:
public class SearchBoxViewModel
{
[Required]
[Display(Name = "Search")]
[Input(Name = "q")]
public string SearchPhrase { get; set; }
}
结合:
@model Pharma.ViewModels.SearchBoxViewModel
<div class="smart-search">
@using (Html.BeginForm("Index", "Search", FormMethod.Get, new { @class = "form-horizontal", role = "form" }))
{
<div class="form-group">
<div class="hidden-xs- col-sm-1 col-md-1 col-lg-1 text-right">
@Html.LabelFor(m => m.SearchPhrase, new { @class = "control-label" })
</div>
<div class="col-xs-8 col-sm-8 col-md-9 col-lg-10">
@Html.TextBoxFor(m => m.SearchPhrase, new { @class = "form-control" })
</div>
<div class="col-xs-4 col-sm-3 col-md-2 col-lg-1">
<input type="submit" value="Search" class="btn btn-default" />
</div>
</div>
}
</div>
然后会产生类似于以下内容的内容:
<div class="smart-search">
<form action="/Search/Index" method="get" class="form-horizontal" role="form">
<div class="form-group">
<div class="hidden-xs- col-sm-1 col-md-1 col-lg-1 text-right">
<label for="Search" class="control-label">Search</label>
</div>
<div class="col-xs-8 col-sm-8 col-md-9 col-lg-10">
<input type="text" name="q" id="Search" value="" class="form-control" />
</div>
<div class="col-xs-4 col-sm-3 col-md-2 col-lg-1">
<input type="submit" value="Search" class="btn btn-default" />
</div>
</div>
</form>
</div>
我希望这个自定义属性在使用 SearchBoxViewModel 时生效,无论使用什么模板来防止错误,目的是让程序员清楚,同时为用户创建一个用户友好的查询字符串。
是否可以使用 SearchPhrase 属性上的自定义属性以类似于更改显示名称的方式执行此操作?
【问题讨论】:
-
你的意思是文本框中的文本应该默认为'q'吗?
-
这不行吗?
@Html.TextBoxFor(m => m.SearchPhrase, new { @class = "form-control" , Name = "q"}) -
@AlwaysAProgrammer 不,我不想设置默认值
-
@GeorgeLee,在您的解决方案中,FORM 不会在文本框中发布输入的值? Bonner,你能解释一下你到底想要什么吗?
-
您必须在 ViewModel 本身中更改属性的名称。您可能会编写自定义 HTML 帮助程序或 DisplayFor 和模板,但您不能使用 TextBoxFor 来完成,假设 GeorgeLee 的建议不起作用
标签: c# asp.net-mvc razor