17

厳密に型指定された単純なビューがありますが、投稿後にフォームのテキスト ボックスを更新できないようです。

これが私のモデルです:

public class Repair
  {
    public string Number { get; set; }      
  }

そして私の見解ではTextBoxです:

   @Html.TextBoxFor(x => x.Number)

コントローラーへの投稿後にテキストボックスを更新しようとしています:

 [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(Repair r)
        {

          r.Number = "New Value";

          return View(r);

        }

Number を新しい値に設定しても、テキスト ボックス内のテキストは変わりません。私は何を間違っていますか?

4

5 に答える 5

12

モデルを ActionResult に戻して同じビューを返すと、モデル オブジェクトの値が ModelState に含まれます。ModelState には、有効/無効なフィールドと実際の POST された値に関する情報が含まれています。モデル値を更新する場合は、次の 2 つのいずれかを行うことができます。

ModelState.Clear()

また

ModelState["Number"].Value = new ValueProviderResult("New Value", "New Value", CultureInfo.CurrentCulture)

于 2013-08-27T16:54:19.590 に答える
9

この問題への対処から、これはフレームワークの設計上のバグによるものだと感じています。IMO:

@Html.TextBoxFor(x => x.Number) 

モデルから値を取得するのModelStateではなく、モデルから直接取得する必要があります。少なくともこれは、モデルとreturn View(model).

ModelState.Clear() 

ModelStateValidationSummaryを消去してサニタイズするため、答えではありません。からキーを削除するModelStateと、そのキーの ValidationSummary が削除されるため、良くありません。

ModelState["Number"].Value = 
new ValueProviderResult("New Value", "New Value", CultureInfo.CurrentCulture)

は正しいが難解すぎる。したがって、そのような場合、私の好みは以下を使用することです。

<input type="text" name="Number" id="Number" value="@Model.Number"/>

それ以外の

@Html.TextBoxFor(x => x.Number)  
于 2015-06-26T18:19:27.747 に答える
3

ModelState.Clear() が破壊的すぎるとわかった場合は、ModelState.Remove() で残りを保持しながら、変更する項目のみを対象にすることができます。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Repair r)
{
    r.Number = "New Value";
    ModelState.Remove("Number");
    return View(r);
}

また、モデルを更新する前または後にそのメソッドを呼び出すかどうかは、Remove() または Clear() のどちらでも問題ではないようです。

于 2017-07-12T00:09:30.910 に答える