CheckBox用于在Razor中将模型重置为null

时间:2019-01-30 15:01:13

标签: c# asp.net-mvc razor

我正在迭代一个列表,以设置多个 Html.CheckBoxFor 控件的值,但是提交表单后,我在controller参数中获得了模型本身的空值。例如,如果我将 Html.CheckBoxFor 替换为 Html.HiddenFor ,则整个模型绑定都可以正常工作,并且 FunctionViewModel 会正确地传递给控制器​​。

模型

public class FunctionViewModel
{
    //... (this class is huge)
    public MeasuringViewModel MeasuringViewModel { get; set; }
}

模型使用的类

public class MeasuringViewModel
{
   //... (this class is also huge)
   public List<BatchItem> BatchToCancel { get; set; }
}

public class BatchItem
{
    public bool IsCancel { get; set; }
    public VMeasuringService VMeasuringService { get; set; }

    public BatchItem(VMeasuringService vMeasuringService)
    {
        IsCancel = false;
        VMeasuringService = vMeasuringService;
    }
}   

控制器

[HttpPost]
public ActionResult CancelBatch(FunctionViewModel viewModel)
{
    // viewModel is null should I use CheckBoxFor

    return View();
}

表格

@using (Html.BeginForm("CancelBatch", "Services", FormMethod.Post, new { Area = "Functions", @id = "cancelForm" }))
{
    for(int i = 0; i < Model.MeasuringViewModel.BatchToCancel.Count; i++)
    {
        @Html.CheckBoxFor(m => m.MeasuringViewModel.BatchToCancel[i].IsCancel)
    }

    <input type="submit" id="btSubmit" title="Post" alt="Post" value="Post" />
}

那么,这怎么了?

1 个答案:

答案 0 :(得分:1)

您会得到null,因为没有控件ID与模型属性匹配,请通过在浏览器中检查html来检查,Razor生成的控件ID是否与模型属性匹配?

在这种情况下,第二种情况是您无法为控件提供特定的ID,则可以像下面给出的那样使用FormCollection在控制器操作中获取控件值:

[HttpPost]
public ActionResult CancelBatch(FormCollection fc)
{
    // viewModel is null should I use CheckBoxFor

    return View();
}