在回发ASP.NET MVC上获取Checkbox值

时间:2012-07-23 18:43:42

标签: asp.net-mvc razor

我正在编写一个ASP.NET MVC应用程序。我是初学者,所以我确信这很容易。我引用了ASP.NET MVC - How to get checkbox values on post,但代码不再可用,使其无用。

这是我的观点:

@using (@Html.BeginForm("Promote", "FPL", FormMethod.Post))
{
<div data-role="fieldcontain">
<fieldset id="PromotionInfo" name="PromotionInfo">
<legend><b>@Model.itemType Promotion Details</b></legend>
    <label for="TargetDate">Target Date: </label>
    <input type="date" id="TargetDate" data-role="datebox" data-options='{"mode": "flipbox"}' />

    <label for="EmailCC">Email cc List: </label>
    <input type="email" id="EmailCC" />

    <div  data-role="fieldcontain">
    <fieldset data-role="controlgroup">
    <legend>Choose Destination Server(s): </legend>

    @foreach (DataRow server in Model.destinationServerList.Rows)
    {
    <label for="@server.ItemArray[0]">@server.ItemArray[1]</label>  
    <input type="checkbox" name="destinationServerSID" id="@server.ItemArray[0].ToString()"  />
    }

    </fieldset>
    </div>
</fieldset>

</div>

<input type="submit" value="Submit" />
} 

这是我的控制器:

    public ActionResult Promote(string id)
    {
        //Model(item) construction occurs here

        return View(item);
    }

    [HttpPost]
    public ActionResult Promote(FormCollection collection)
    {
        try
        {
            string[] test = collection.GetValues("destinationServerSID");
        }
        catch (Exception ex)
        {
            return null;
        }
    }

test []变量包含一个2项数组,两个数组的值都为“on”,但是,我的项目列表超过了2个项目。对于您选择的每个值,它只包含一个“on”,但没有“off”值。我需要复选框的实际值(id字段)。

2 个答案:

答案 0 :(得分:3)

ID未发布到服务器。只有在选中复选框时才会将名称和值发布到服务器。

尝试使用value设置@server.ItemArray[0].ToString()属性。

<input type="checkbox" name="destinationServerSID" value="@server.ItemArray[0].ToString()"  />

答案 1 :(得分:3)

默认HTML帖子行为不会为未选中的框发送值。您可以使用Html.CheckboxFor方法,它将生成所有必要的输入以始终发布值。