Asp.net mvc 对dropdownlist更改调用控制器操作

Asp.net mvc 对dropdownlist更改调用控制器操作,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,下面的代码可以工作,但这段代码的问题是,每次触发onchange事件时,它都会将会话/视图包数据释放为null,我正在研究一种不同的方法,在用户更改dropdownlist中的任何内容时,我应该能够调用on,并在不丢失会话/视图包的情况下将值传递给控制器数据 @Html.DropDownListFor( m => m.Company, new SelectList( (System.Collections.IEnumerable) ViewBa

下面的代码可以工作,但这段代码的问题是,每次触发onchange事件时,它都会将会话/视图包数据释放为null,我正在研究一种不同的方法,在用户更改dropdownlist中的任何内容时,我应该能够调用on,并在不丢失会话/视图包的情况下将值传递给控制器数据

@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;" 
    })

这听起来像是您在考虑原始ASP.NET模型,在该模型中,框架为每个用户请求重新水化会话,例如当DropDownList触发OnChange回发时

Mvc不是这样工作的没有持续会话

相反,您自己负责维护状态,或者围绕状态进行架构设计。例如,您可以将所需数据序列化到下拉列表上方的隐藏字段中,然后将其附加到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;

@Html.DropDownListFor(。。。
onchange=“document.location.href=/url/?c=“+
this.options[this.selectedIndex].value+
“&state=“+$('#state')。值;

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

我认为您的意思是“viewstate”而不是“session”.MVC非常支持会话。@CodeCaster-我指的是持久服务器端会话。因此MVC没有在用户请求之间保留“会话”的概念。不确定您的意思。它确实存在,MVC控制器公开了会话属性……我不是说您的答案不正确,但我不同意您关于会话的说法。也许SessionState是更合适的术语?