1

最近、いくつかの質問をして申し訳ありません。しかし、あらゆる親切な助けに感謝します。実際には、MVC3 Razor を使用して View から Controller にデータを渡す必要があります。

ビューコードは次のとおりです。

Html.RenderAction("Checks", Model.GetRoleNames);

コントローラーコードは次のとおりです。

    public ActionResult Checks(string[] getRoleNames)
    {
        // The parameter is NULL which should NOT be!
        //ViewBag.Name = name;
        //return View(values);
        return View();
    }

部分ビュー コードは次のとおりです。

@model string[]
@{
for (int i = 0; i < Model.Length; i++)
{
<input id="@ViewBag.Name@(i)" name="@ViewBag.Name" type="checkbox" value="@(Model[i])"    />
<label for="@ViewBag.Name@(i)">@Model.[i]</label>
<br />
}

}

問題: Model.GetRoleNames は、行ごとにトレースしようとしたため、View 内に値を持っています。しかし、パラメーターとしてコントローラーアクションに値が渡されません! 考えられる理由はわかりません。

誰でも私を助けてもらえますか?

4

1 に答える 1

2

このメソッドは、少し異なる形式のルート パラメーターを想定しています。

Html.RenderAction("Checks", new {getRoleNames = Model.GetRoleNames});

アップデート。パラメータをこのような形式で提供する必要がある理由については、MSDN の説明を参照してください。

ルート値

ルートのパラメーターを含むオブジェクト。routeValues を使用して、アクション メソッドのパラメーターにバインドされるパラメーターを提供できます。routeValues パラメーターは、元のルート値とマージされ、オーバーライドされます。

ここで追加する唯一のことは、このオブジェクトが入力パラメーターにどの程度正確にバインドされるかです。デフォルトのモデル バインダーは、入力オブジェクトを解析し、オブジェクトのフィールドとアクションの入力パラメーターの名前との対応を見つけようとします。したがって、上記の場合、Actionという名前の単一のパラメーターがgetRoleNamesあり、それがモデル バインダーが探していた名前です。明らかに、オブジェクトにModel.GetRoleNamesはそのようなフィールド/プロパティは含まれていませんが、含まれてnew {getRoleNames = Model.GetRoleNames}います。

于 2013-06-08T09:53:43.123 に答える