在下拉列表更改时调用控制器操作

时间:2015-07-08 18:14:59

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

下面的代码可以工作,但是这个代码的问题是,每次onchange事件被触发时,它会将session / viewbag数据丢失为null,而我正在寻找一种我应该能够调用的不同方法当用户更改下拉列表中的任何内容并将值传递给控制器​​而不会丢失我的session / viewbag数据时。

@Html.DropDownListFor(
    m => m.Company, 
    new SelectList(
       (System.Collections.IEnumerable)
       ViewBag.DropDownCompanyName, 
       "Value", "Text"), 
    new { 
      @class = "form-control", 
      onchange = 
          "document.location.href = '/Home/Employee?c=' +  
           this.options[this.selectedIndex].value;" 
    })

1 个答案:

答案 0 :(得分:0)

听起来您正在考虑原始的ASP.NET模型,其中框架为每个用户请求重新组合Session,例如当DropDownList触发OnChange帖子时。

Mvc不会这样工作; 没有持久的会话

相反,您自己负责维护状态,或围绕它进行架构。例如,您可以将所需数据序列化到Drop Down上方的隐藏字段中,然后将其附加到url中:

<input type='hidden' id='state' value=@Model.SomeSerializedState />
@Html.DropDownListFor(... 
       onchange = "document.location.href = /url/?c=" + 
                  this.options[this.selectedIndex].value + 
                  "&state=" + $('#state').value;

或者你可以围绕它进行构建。由于您正在加载特定于下拉列表中的值的数据,因此您可以使用Ajax调用加载该数据并使用JavaScript更新页面DOM。