如何将SelectList的选定值传递给我的Action?

时间:2013-08-20 12:46:18

标签: asp.net-mvc asp.net-mvc-4 razor

在我的ASP.NET MVC 4项目中,我有一个View有这个部分:

    <td>
         @Html.DropDownList("SelectedValue", ViewBag.SoftwaresList as SelectList, "Add New Software")
    </td>
    <td>
        No Description
    </td>
    <td>
        @Html.ActionLink("Add", "AddSoftware", new { pDeviceId = Model.Id, pSoftwareId =  Model.SelectedValue})
    </td>

我的模型有一个对象属性“SelectedValue”。我想要做的是,当用户点击链接添加时,我传递设备ID(工作正常,因为这是从传递到视图中的模型直接)和DropDownList中的选定ID。 DropDownList是不同Model的集合,但它也包含Id。

我试过以下但没有运气:

@Html.ActionLink("Add", "AddSoftware", new { pDeviceId = Model.Id, pSoftwareId = 
      ((ViewBag.SoftwaresList as SelectList).SelectedValue as SoftwareModel).Id})

值得注意的是:DropDownList正确填充了我的SoftwareModel,但是,我没有运气将所选值中的附加值传递给Controller中的Action。

事实上,我在Chrome浏览器中看到的是:

  

someURL \ AController \ AddSoftware?pDeviceId = 2

我希望它会像:

  

someURL \ AController \ AddSoftware pDeviceId = 2及?pSoftwareId = 5

4 个答案:

答案 0 :(得分:2)

最简单的方法是将表单放在一个表单中(使用@ Html.BeginForm或@ Ajax.BeginForm)并使Button成为该表单的提交按钮。控制器操作方法可以定义您要提交的模型的输入参数或仅定义ID本身。在这种情况下,浏览器和框架将为您完成所有工作。

@using (
        Ajax.BeginForm
            (
               "MyAction",
                "MyController",
                new {Param1 = value1, param2 = value2 },
                new AjaxOptions
                    {
                        OnSuccess = "javascriptForSuccess",
                        UpdateTargetId = "DivToUpdate",
                        OnFailure = "javascriptForFailure",
                        InsertionMode = InsertionMode.Replace,
                        HttpMethod = "POST",
                    }
            )
        )
{
    <td>
         @Html.DropDownList("SelectedValue", ViewBag.SoftwaresList as SelectList, "Add New Software")
    </td>
    <td>
        No Description
    </td>
    <td>
        <input type="submit" id="Btn_Create" name="Btn_Create" value="Create" />
    </td>
}

答案 1 :(得分:1)

您正在服务器上创建该操作链接并将HTML发送到客户端。用户从客户端下拉菜单中选择一个值,这意味着当您为添加链接创建HTML时,该值不可用(即@Html.ActionLink("Add"

您应该创建一个form并将值发布到服务器以获取选定的值

或者

您可以使用JavaScript从链接中获取所选值,并在点击链接时将其发送到服务器。

答案 2 :(得分:0)

试试这个

@Html.DropDownListFor(m => m.pDeviceId , (SelectList)ViewBag.SoftwaresList, new { onchange = "document.location.href = 'AddSoftware?pDeviceId=' + this.options[this.selectedIndex].value;" })

答案 3 :(得分:0)

您最好的选择是使用以下HTML和Controller设置将其转换为表单。您还必须将ViewBag.SoftwaresList更改为List<SelectListItem>()

<强> HTML:

@using(Html.BeingForm())
{
<td>
     @Html.DropDownListFor(x => x.SelectedValue, ViewBag.SoftwaresList as List<SelectListItem>, "Add New Software")
</td>
<td>
    No Description
</td>
<td>
    @Html.ActionLink("Add", "AddSoftware", new { pDeviceId = Model.Id, pSoftwareId =  Model.SelectedValue})
</td>
}

<强>控制器:

[HttpPost]
public ActionResult(MyModel model)
{
    //Logic Code Goes Here
    return View(model);
}

选择列表: 以下是创建选择列表的方法。请注意我不使用'Selected'参数,这将自动为您计算,因此不需要

var selectList = new List<SelectListItem>();
selectList.Add(new SelectListItem
{
    Text = "Name",
    Value = "ID"
});