複雑なモデルの一部を変更するための単純なフォームがあります。もちろん、モデルを簡略化することもできますが、最終的にはモデル全体を扱うことになるため、複雑なケースを解決したいと考えています。
レンダリングされた入力に単純な ID と名前を付けたいのですが、モデル名が動かないようです。
@Html.EditorFor(model => model.CallInfo.Phone1,
new { @id = "Phone1", @name = "Phone1"})
これを出力する必要があります
<input type="text" value="" name="Phone1" id="Phone1" class="text-box single-line">
代わりに、これを出力し、どこでも CallInfo を前に付けます。
<input type="text" value="" name="CallInfo.Phone1" id="CallInfo_Phone1" class="text-box single-line">
これを無効にできない場合、CallInfo.Phone1
パラメーターをアクション メソッドのパラメーターに自動解析する方法はありますか? これは、C# では無効な構文であるためです。
public ActionResult UpdatePhoneNumber(Int32 profileId, String CallInfo.Phone1)
繰り返しますが、リクエストから手動で取得できることに気付きました。
HttpRequest.Current.Params["CallInfo.Phone1"]
しかし、ここでは C# MVC4 の規則がうまく連携して、これらの自動魔法のウィジェットの 1 つが正しいことを行うように思われます。
更新: Dmitri の回答に続いて、ビュー マークアップをそのままにして、name="CallInfo.Phone1"
属性を生成し、アクション シグネチャを次のように変更しました。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdatePhoneNumber(Int32 profileId,
[Bind(Prefix = "CallInfo")] string phone1)
{
// Save it
}
デバッガーでphone1
は null であり、データベースに保存されません。firebug からキャプチャされた投稿本文には、次のように書かれています。
Parameters application/x-www-form-urlencoded
CallInfo.Phone1 8121234567
p
また、Phone1
パラメーター名で大文字を使用しようとしましたが、効果がありませんでした。