从MVC3局部视图访问控制器中的模型数据,而不在视图中显式传递

时间:2012-11-01 10:23:57

标签: asp.net-mvc-3 view model controller httprequest

我有一个用模型调用的MVC3局部视图。

@model SomeModel

该模型具有Id参数。

在视图中,我呼叫@Html.Action("SomeMethod", "SomeController")

有没有办法访问SomeMethod ActionResult中的Id参数而不像这样明确地传递它:

@Html.Action("SomeMethod", "SomeController", new {"Id" = Model.Id})

问题是我无法更改局部视图的源代码。我需要Id值。 Id未在部分视图中使用,因此我无法通过JavaScript访问它。 模型是否传递给HttpContext并且有什么方法可以传递它吗?

编辑:问题是我正在为nopCommerce开发一个插件,就像nop-templates提供的插件一样。 nopCommerce是一个开源软件,我可以更改代码,但插件将单独发货,因此不建议在nopCommerce视图中进行更改,而我所指的视图是这样的

2 个答案:

答案 0 :(得分:2)

如果无法更改局部视图的源代码,则无法获取控制器中的id值。它完全解耦为MVC模式的一个主要观点。 您必须明确地将其作为参数传递给您的操作。 一个肮脏的解决方法可能是将该ID存储在Session

中的某个位置

答案 1 :(得分:1)

在我的项目中,我按国家/地区ID填写我的状态下拉列表

在我看来

我将国家ID传递给我的控制器ActionResult,就像这样

<script type="text/javascript">
    function cascadingdropdown() {          
        var countryID = $('#countryID').val();
        $.ajax({
            url: "@Url.Content("~/City/State")",
            dataType: 'json',
            data: { countryId: countryID },
            success: function (data) {
                alert(data);
                $("#stateID").empty();
                $("#stateID").append("<option value='0'>--Select State--</option>");
                $.each(data, function (index, optiondata) {
                    alert(optiondata.StateName);
                    $("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>");
                });
            },
            error: function () {
                alert('Faild To Retrieve states.');
            }

        });
    } 
</script>

在我的控制器中我有动作

public JsonResult State(int countryId)
{                
 var stateList = CityRepository.GetList(countryId);
 return Json(stateList, JsonRequestBehavior.AllowGet);
}

我认为这会对你有帮助....