在ActionLink中获取Dropdownlist的选定值(MVC 5)

时间:2014-09-07 19:27:52

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

我想在@ Html.ActionLink中获取下拉列表的选定值但到目前为止没有运气。要求是动态检索表并具有可以对该行采取的操作的下拉列表。我需要选择一个动作,然后点击提交按钮,行ID和选定的动作值应该发布到控制器。这是我现有的一段代码。

@foreach (AdsViewModel ad in Model)
{
  <tbody>
     <tr>

         <td>@ad.Row_Id</td>
         <td class=" "> @ad.Description </td>
         <td class=" "> @ad.Valid_To.ToShortDateString() </td>
         <td><span class="label label-sm label-success label-mini"> @ad.Status </span></td>
         <td>@Html.DropDownList("actions", ad.Actions) </td>
         <td>@Html.ActionLink("Submit", "AdAction", new {adId = ad.Row_Id, action = ad.Actions.SelectedValue}) </td>
     </tr>
   </tbody>

}

点击提交ActionLink后,我收到了adId,但是没有从下拉列表中返回任何操作。

非常感谢您的帮助。 编辑:这是AdsViewModel

public class AdsViewModel
{
    public string Row_Id { get; set; } //Transaction Number
    public string Description { get; set; } //Trasaction Description
    public DateTime Valid_To { get; set; } //Expiry
    public string Status { get; set; } //Object Status Code
    public SelectList Actions { get; set; }
}

这是在Controller中填写选择列表的方式

List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = "View", Value = "001" });
items.Add(new SelectListItem(){Text = "Modify", Value = "002"});
model.Actions = items;

3 个答案:

答案 0 :(得分:3)

这一行

<td>@Html.ActionLink("Submit", "AdAction", new {adId = ad.Row_Id, action = ad.Actions.SelectedValue}) </td> 

将路由值action设置为在服务器上创建视图时以及在将其发送到浏览器之前所选的值(用户尚未选择任何内容以使其为null)。如果您想将值设置为“001”或“002”(下拉列表的值),则需要在下拉列表更改时使用javascript更新链接的href属性。更简单,更传统的解决方案是删除下拉菜单并使用2个操作链接,一个用于View,另一个用于Edit。由于它们是两个不同的动作,因此控制器中还应该有两个单独的ActionResult方法。例如

@Html.ActionLink("View", "View", new { id = ad.Row_Id }) // calls the View method
@Html.ActionLink("Modify", "Modify", new { id = ad.Row_Id }) // calls the Modify method

修改

要使用javascript执行此操作,请删除@Html.ActionLink并替换为<button type="button">或其他元素并处理其click事件

var url = '@Url.Action("AdAction")';
$('button').click(function() {
  var row = $(this).closest('tr');
  var rowID = row.children('td').eq(0).text();
  var actionID = row.find('select').val();
  window.location.href = url + '?adId=' + rowID + '&action=' + actionID;
});

注意:您使用@Html.DropDownList()方法创建了无效的html(所有<selects>都将id="action"

答案 1 :(得分:0)

这应该解决它......

@for (int i = 0; i < Model.Count(); i++)
{
    var ad = Model[i];
    <tbody>
        <tr>
            <td>@ad.Row_Id</td>
            <td class=" "> @ad.Description </td>
            <td class=" "> @ad.Valid_To.ToShortDateString() </td>
            <td><span class="label label-sm label-success label-mini"> @ad.Status </span></td>
            <td>@Html.DropDownListFor("actions", m => m[i].Actions) </td>
            <td>@Html.ActionLink("Submit", "AdAction", new {adId = ad.Row_Id, action = ad.Actions.SelectedValue}) </td>
        </tr>
    </tbody>
}

答案 2 :(得分:-1)

谢谢大家,我通过编写Javascript函数并在按钮的onClink事件上调用该函数来解决它。

<script type="text/javascript" language="javascript">
        function ShowEditData() {
            var url = '@Url.Action("AdAction")';

            var rows = document.getElementById("mytable").rows;
            for (var i = 0, ceiling = rows.length; i < ceiling; i++) {
                rows[i].onclick = function () {
                    debugger;
                    var Row_Id = this.cells[0].innerHTML;
                    var actionID = this.cells[4].childNodes[0].value;
                    window.location.href = url + '?row_id=' + Row_Id + '&action_id=' + actionID;
                }
            }

        }
 </script>