5

したがって、次の3行があります。

<div style="background-color: lightgreen;">@Html.TextBoxFor(m => m.Id)</div>
<div style="background-color: green;">@Html.DisplayTextFor(m => m.Id)</div>
<div style="background-color: pink;">@Model.Id</div>

薄緑色の値は Model.Id ではなく、ルートによって設定された Id であることを確認しました。

routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "MyFunController", action = "Index", id = UrlParameter.Optional });

ここでいくつかの説明に出くわしました:

しかし、それらはすべて私の食欲をそそります。これを回避するスマートな方法を探しています。モデルのプロパティ名を変更したくないし、ルート アイテムの名前も変更したくありません。もし私がそうすると、それは私にとって多くの仕事を意味し、理想的ではありません.

この問題を抱えているのは私だけではありませんか?

(これは MVC 4 です)

ありがとう!

4

1 に答える 1

6

ModelStateビューをレンダリングしているコントローラー アクションで、(Html ヘルパーが値を取得する場所)から問題のある値を削除できます。

public ActionResult SomeAction(int id)
{
    ModelState.Remove("Id");
    MyViewModel model = ...
    return View(model);
}

これIdは、ルートからのものではなく、TextBox によって使用されるビュー モデルのプロパティです。

明らかに、それは醜い恐ろしい回避策にすぎません。もちろん、正しい方法は、ビューモデルを適切に定義して、そのような名前の競合が発生しないようにすることです。

于 2013-03-07T22:10:56.510 に答える