0

私は非常に単純なコントローラー+ビューを持っています

public ActionResult Edit(string username)
{
    return View(ComponentFactory.GetAdapter<IUserListAdapter>().Get(username));
}

@model BAP.Models.UserList
@using GrmanIT.Utils.Web
@using BAP.Models
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Globale Benutzer</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.UserId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserId)
            @Html.ValidationMessageFor(model => model.UserId)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Model.UserName
            @Html.ValidationMessageFor(model => model.UserName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Bundesland)
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.Bundesland, new SelectList((IEnumerable<BAP.Models.Bundesland>)ViewData["BundeslandList"], "Value", "Text"))
        </div>
        <div>
            <input type="submit" value="@LocalizationHelper.LocalizedLiteral("Save").ToString()" />
        </div>
    </fieldset>
}
<div>
    @Html.ActionLink(LocalizationHelper.LocalizedLiteral("BackToList").ToString(), "Index")
</div>
@Model.UserName

これは、MVC4 アプリケーションで使用する最も単純なコントローラーとビューですが、奇妙なことを行います: @Html.EditorFor(model => model.UserName) で作成されTextBoxを、UserNameの代わりのモデル

私はそれをデバッグし、そこにはいつものようにUserNameUserIdの正しい値があります。ビュー内に@Model.UserNameを 2 回追加して、正しくレンダリングされるかどうかを確認したこともわかります。はい、ID ではなく UserName が出力されます。

UserName プロパティへの参照も確認しましたが、それを変更するものは見つかりませんでした。私の質問は、コードをどこで変更できるか、またはそれを見つけたらどうすればよいか、何か考えがありますか?

この1つのアクションのこの1つのコントローラーでのみ発生します(〜25コントローラーと〜200アクションのうち)

ありがとうございました

4

1 に答える 1

0

上記のコードでわかるように、再び ModelState でした。関数へのパラメーターは「username」と呼ばれますが、実際には userId です。パラメータusernameがすでにあるため、ModelStateに保存され、呼び出したときに

@Html.EditorFor(model => model.UserName)

ModelState から値を取得します (実際には UserId はアクション パラメータの名前で格納されます)。

したがって、解決策は、 ModelState.Clear() を呼び出すか、実際の値を表すようにパラメーターの名前を変更することです。

于 2013-06-24T15:53:33.267 に答える