MVC从视图传递到视图模型之外的控制器数据

时间:2016-08-28 09:16:21

标签: c# asp.net-mvc

我有一个用于在拍卖网站上创建拍卖的界面。

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>
}

有没有办法以这种方式传递参数?

1 个答案:

答案 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;
}