我有一个用于在拍卖网站上创建拍卖的界面。
Instrumentation
我遇到的问题是“现在”复选框。我希望它以这样的方式工作:当检查时,控制器将startDate设置为DateTime.Now。 不幸的是,我不知道是否有任何方法可以将复选框的值传递给控制器而无需编辑模型。我正在寻找类似的东西:
@using (Html.BeginForm("AddAuction", "Auction", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.title, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.title)
@Html.ValidationMessageFor(model => model.title)
</div>
</div>
(...) some other fields
<div class="form-group">
@Html.LabelFor(model => model.startDate, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.startDate)
@Html.ValidationMessageFor(model => model.startDate)
<input type="checkbox" id="gm" name="gm" value="Now" onclick=""> Now<br>
</div>
</div>
(...) some other fields (...)
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default">Send</button>
</div>
</div>
}
有没有办法以这种方式传递参数?
答案 0 :(得分:2)
如果您的复选框的值为bool,则可以执行以下操作:
<input type="checkbox" id="gm" name="gm" value="True"> Now<br>
<input type="hidden" name="gm" value="False">
在控制器中
public async Task<ActionResult> AddAuction(Auctions auction, bool gm)
复选框仅在选中后才会提交,这就是为什么如果未选中复选框,则必须添加具有相同名称的隐藏输入才能提交错误值。
如果你不想使用隐藏输入,那么你可以在动作中使bool参数为nullable,并将null视为false。
public async Task<ActionResult> AddAuction(Auctions auction, bool? gm = null)
{
if(gm == null)
gm = false;
}