1

在我的 ASP.NET MVC 4 项目中,我有一个包含以下内容的视图:

    <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 是不同模型的集合,但它也包含一个 Id。

我试过以下没有运气:

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

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

事实上,我在 Chrome 悬停时看到的是:

someURL\AController\AddSoftware?pDeviceId=2

我希望它是这样的:

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

4

4 回答 4

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>
}
于 2013-08-20T12:54:02.207 回答
1

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

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

或者

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

于 2013-08-20T12:51:19.693 回答
0

试试这个

@Html.DropDownListFor(m => m.pDeviceId , (SelectList)ViewBag.SoftwaresList, new { onchange = "document.location.href = 'AddSoftware?pDeviceId=' + this.options[this.selectedIndex].value;" })
于 2013-08-20T12:59:32.033 回答
0

您最好的选择是使用以下 HTML 和控制器设置将其转换为表单。您还必须将 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);
}

选择列表: 这是创建选择列表的方法。请注意我如何不使用“已选择”参数,这将自动为您计算,因此无需

var selectList = new List<SelectListItem>();
selectList.Add(new SelectListItem
{
    Text = "Name",
    Value = "ID"
});
于 2013-08-20T13:00:24.757 回答