2

BeginForm()パラメータがどこにあるかのオーバーロード 10 を使用しています。

  1. 文字列アクション名
  2. 文字列コントローラー名
  3. オブジェクトのルート値
  4. FormMethod メソッド

以前にコントローラーからビューに渡された複雑なオブジェクトであるモデルを 3 番目のパラメーターに入れました。ただし、コンパイル エラーが発生します。

CS1928: 'System.Web.Mvc.HtmlHelper<MvcApplication5.Models.xxxModel>'does not 
contain a definition for 'BeginForm' and the best extension method overload 
'System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper, 
string, string, object, System.Web.Mvc.FormMethod)' has some invalid 
arguments

ビューからコントローラーに複雑なオブジェクトを投稿する方法はありますか?


編集:

私のモデルは次のとおりです。

public xxxModel
{
   public string Name { get; set; }
   public Adddress Address { get; set; }
}

私の見解は次のとおりです。

@model namespace.xxxModel
...
@using (Html.BeginForm("actionName", "controller", Model, FormMethod.Post) { .....
4

2 に答える 2

5

Model クラスを RouteValues パラメータ内に配置することはできません。

MSDN ヘルプ を参照してください。ヘルプ
に記載されているとおり:

routeValues
型: System.Object
ルートのパラメーターを含むオブジェクト。パラメーターは、オブジェクトのプロパティを調べることにより、リフレクションを通じて取得されます。このオブジェクトは通常、オブジェクト初期化構文を使用して作成されます

それならこれを使おう

new { MyProp1 = Model.Prop1, MyProp2 = Model.Prop2, MyProp3 = Model.Prop3, ... }

それ以外の場合は、フォーム内で隠しフィールドを使用してください。ModelBinder は、ポスト中にそれらをモデルにマップします

于 2013-09-24T14:27:26.127 に答える
0

送信するフォームにユーザーに記入してもらうと仮定すると、ビューを次のように変更できます。

@using(Html.BeginForm("actionName", "Controller", FormMethod.Post)
{
    @Html.TextBoxFor(m => m.Name)
    @Html.TextBoxFor(m => m.Address)
}

あなたのアクションは、モデルをパラメーターとして受け入れます。

** 注: フォームが投稿先のアクションのビューにある場合は、次の操作を実行できます。

@using(Html.BeginForm())
{
    ...
}
于 2013-09-24T14:42:04.697 に答える