2

モデルで呼び出されるMVC3部分ビューがあります。

@model SomeModel

モデルにはIdパラメーターがあります。

私が呼ぶビューで@Html.Action("SomeMethod", "SomeController")

次のように明示的に渡さずにSomeMethodActionResultのIdパラメーターにアクセスする方法はありますか?

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

問題は、部分ビューのソースコードを変更できないことです。そして、Id値が必要です。Idは部分ビューで使用されていないため、JavaScript経由でアクセスできません。モデルはHttpContextに渡されますか?それを渡す方法はありますか?

編集:問題は、 nop-templatesによって提供されるもののようなnopCommerce用のプラグインを開発しているということです。nopCommerceはオープンソースソフトウェアであり、コードを変更できますが、プラグインは別売りであるため、nopCommerceビューを変更することはお勧めしません。私が参照しているビューはそのようなものです。

4

2 に答える 2

2

部分ビューのソースコードを変更できない場合、コントローラーのid値を取得する方法はありません。それがMVCパターンの1つの主要なポイントであるため、完全に分離されています。アクションへのパラメーターとして明示的に渡す必要があります。汚い回避策は、そのIDをのどこかに保存することかもしれませんSession

于 2012-11-01T12:33:49.107 に答える
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);
}

私はこれがあなたを助けると思います...。

于 2012-11-01T12:24:36.727 に答える