我可以在asp.net mvc中的控制器操作中访问母版页下拉列表值

时间:2011-01-17 12:37:02

标签: asp.net-mvc-2

我有一个母版页,我在其上显示用户现在可以访问的组我希望在许多控制器中获取其选定值以保存记录。我想知道是否有可能在asp.net mvc 2中,如果没有,那么它的方法是什么

3 个答案:

答案 0 :(得分:1)

您正在尝试的是可能的,并且有不同的技术来实现它。最好的方法取决于您如何调用控制器操作。无论您使用的是普通超链接,还是提交标准<form>或使用AJAX。因此,如果您使用标准操作链接,则可以添加一些绑定到每个链接的onclick事件的javascript,并添加该组的选定值。例如:

$(function() {
    $('a').click(function() {
        // everytime a link is clicked
        // add the value of the selected group to the url
        var selectedGroup = $('#IdOfYourDdl').val();
        if (this.href.indexOf('?') > 0) {
            window.location = this.href + '&selectedGroup=' + selectedGroup;
        } else {
            window.location = this.href + '?selectedGroup=' + selectedGroup;
        }
        // cancel the default action as it doesn't contain the selectedGroup
        // parameter in the request
        return false;
    });
});

并且在您的控制器操作中,您可以使用以下附加参数:

public ActionResult Foo(string selectedGroup)
{
   ...
}

另一个例子是如果您使用AJAX,您可以在母版页中设置默认数据,这将确保下拉列表的值将沿您正在执行的每个AJAX请求发送:

$.ajaxSetup({
    data: { selectedGroup: $('#IdOfYourDdl').val() }
});

现在每当您向服务器发送AJAX请求时:

$.get('/foo', { someParam: 'someValue' }, function(result) {

});

将发送以下请求:/foo?someParam=someValue&selectedGroup=123,这样您就可以在控制器操作中获取所选组的值。

答案 1 :(得分:0)

我希望我理解你的问题,因为没有提供代码示例。 您可以使用包含显示组的页面上的viewmodel执行此操作。另一个选择是在发布页面时从FormCollection中获取值。

例如:

public ActionResult MyAction(MyViewmodel viewModel)
{
//value from your viewmodel, strongtype
var value = viewModel.group;
}

OR

public ActionResult MyAction(FormCollection collection)
{
//value as a string
var value = collection.getValue("MyKey").AttemptedValue;
}

如果这个答案没有让您满意,那么请在您的问题中更清楚,我会尽力帮助您。

答案 2 :(得分:0)

只要您的下拉列表是提交的<form>的后代,它就会受到标准model binding的约束,这意味着您可以将其作为参数包含在您的操作中。确保下拉列表的name属性与操作参数的名称匹配。

最终呈现的HTML:

<form action="http://.../MyAction" method="post">
  <select name="dropDownList">
    <option value="a">Option A</option>
    <option value="b">Option B</option>
    ...
  </select>
  ...
</form>

控制器:

[HttpPost]
public ActionResult MyAction(string dropDownList, MyActionModel model)
{
    // dropDownList = value attribute of selected <option>
    ...
}