2012-04-07 48 views
3

我很有兴趣在更改DropDown时运行Action。现在我不想使用任何Ajax或JavaScripts,我需要回发。 这是我的编辑视图代码:使用Razor View Engine在ASP.NET MVC3中使用传递参数更改DropDownListFor中的运行Action

@Html.DropDownListFor(model => Model.Title, MySelectList) 

而我的HTML DOM:

<select name="Title" id="Title"> 
    <option value="7" selected="selected">AV</option> 
    <option value="9">HS</option> 
    <option value="8">IT</option> 
</select> 

,所以我需要在下拉菜单中运行的变化MajorCategoryChange行动与 PPId = Model.Id参数和CategoryId = selectedoption.Value注意,下拉是编辑视图操作,并在更改我需要另一个操作运行它。

返回的URL是这样的:

"http://MyProject/Products/ProductPoint/MajorCategoryChange?PPId=1&CategoryId=123" 

,你有何建议?

回答

2

你必须在onchange-属性中添加一些JavaScript代码,而不仅仅是一个URL。如果您想将用户重定向到其他页面,则可以使用location.href

@Html.DropDownListFor(model => Model.Title, MySelectList, new { @onchange = "location.href = http://MyProject/Products/ProductPoint/MajorCategoryChange?PPId=1&CategoryId=123;" }) 
+0

我用你确切的代码表示,没有改变的是,钢同样的问题 – Saeid 2012-04-07 10:31:11

0

你的问题是有点混乱,因为你说你想用onchange而且你不想使用JavaScript。 onchange只能与JavaScript一起使用。如果您不想使用JavaScript,则必须将选择内容包装在表单中,并提交一个提交按钮以获取回传。

例如

@using (Html.BeginForm("MajorCategoryChange", "YourController", FormMethod.Post)) 
{ 
    <input type="hidden" name="PPId" value="@Model.Id" /> 
    @Html.DropDownListFor(model => Model.Title, MySelectList) 
    <input type="submit" value="Go" /> 
} 

如您有它设置,你想为你的CategoryId将通过模型名称Title结合进来的价值,所以你可能想在你的模型更改参数的名字从TitleCategoryId。或者在您的操作方法中更改您的参数名称,例如

[HttpPost] 
public ActionResult MajorCategoryChange(int PPId, int Title) 
{ 
    // ... 
} 
+0

谢谢你的回答其实我需要一个实现运行在下拉改了,不与其他按钮(如你所说提交按钮的动作) – Saeid 2012-04-07 11:18:29

+0

然后尝试添加@ Html.DropDownListFor(model => Model.Title,MySelectList,new {@onchange =“this.form.submit()”})。 – ngm 2012-04-07 11:25:03

+0

假设dropdownfor在编辑视图中我需要运行MajorCategoryChange Action才能更改它,如果我只是使用您的建议代码Edit再次运行或编辑httppost动作 – Saeid 2012-04-07 11:30:21

相关问题