我在MVC 5中创建了一个表单。下面有一个文本框:
<div class="form-group">
@Html.LabelFor(model => model.Client_PID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Client_PID, new { htmlAttributes = new { @class = "form-control" } } )
@Html.ValidationMessageFor(model => model.Client_PID, "", new { @class = "text-danger" })
</div>
</div>
我希望使用默认值使其有条件地不可见,否则由客户填写。
实现这一目标的最佳方法是什么。我已经能够有条不紊地使文本框不可见,但随后我的表单失败, if(ModelState.IsValid)无效...如何将默认值传递给它?
答案 0 :(得分:1)
您可以在隐藏时使用HiddenFor
,在其他情况下,您可以生成文本框,例如:
@if(ShouldBeVisible)
{
@Html.EditorFor(model => model.Client_PID, new { htmlAttributes = new { @class = "form-control" } } )
@Html.ValidationMessageFor(model => model.Client_PID, "", new { @class = "text-danger" })
}
else
{
@Html.HiddenFor(model => model.Client_PID,1)
}
现在在bool
的基础上,我们正在创建隐藏字段并设置它的默认值,否则它将生成文本框,用户需要填写值。
希望它有所帮助!
答案 1 :(得分:0)
您也可以使用输入复选框和jQuery函数来控制此显示/隐藏效果及其目标默认值。
<label for="hidden">
<input type="checkbox" id="hidden" class="display-hidden" data-target=".hidden" />
Show Client ID?
</label>
<div class="form-group hidden">
@Html.LabelFor(model => model.Client_PID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Client_PID, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Client_PID, "", new { @class = "text-danger" })
</div>
</div>
然后是jQuery函数:
$(".display-hidden").click(function() {
var target = $(this).attr("data-target");
if($(this).is(':checked'){
$(target).fadeIn(320);
} else {
$(target).fadeOut(320);
$(target).val(//your default value);
}
});
答案 2 :(得分:0)
以下是我的表现......在我看到你的精彩答案之前,我想出来了......谢谢你的帮助!!
@if(true) { 投入档案 } 其他 { @ Html.EditorFor(model =&gt; model.Client_PID,new {htmlAttributes = new {style =&#34; display:none&#34;}}) }
也许这不是最佳做法?