1

明らかな何かを見落としているかどうかはわかりません。POST を実行すると、次のようになります (注: 私がしようとしているのは、ユーザーが別のエントリを作成できるように、同じビューにいくつかの null 値をデフォルト設定することです)。

    [HttpPost]
    public ActionResult QkInsert(ProgInfo model)
    {

        if (ModelState.IsValid)
        {
            ProgService.InsertQuickEntry(model);


            model.Name = null;
            model.Address = null;
            model.Phone = null;            

            return view(model);


        }

         return view(model);

奇妙なのは、 IsValid() でモデルの値を見ると

    return view(model) 

null 値が表示されます。ただし、ビューに表示される場合、null ではありません。最初にデータを入力したときと基本的に同じビューです。何か案が?私は何かを見落としましたか?

また、return view(model) を 2 回実行したことにも注目してください。これを一度だけ行い、繰り返さない他の方法はありますか?

4

2 に答える 2

2

これは、HTML ヘルパーが値をバインドするときに最初に ModelState を調べ、その後でモデルの値を調べるためです。これは仕様によるものです。

したがって、POST アクション内のモデルの値を変更する場合は、最初に ModelState から削除する必要があります。

[HttpPost]
public ActionResult QkInsert(ProgInfo model)
{
    if (ModelState.IsValid)
    {
        ProgService.InsertQuickEntry(model);

        ModelState.Remove("Name");
        ModelState.Remove("Address");
        ModelState.Remove("Phone");
        model.Name = null;
        model.Address = null;
        model.Phone = null;            

        return view(model);
    }

    ....
}

これで、ビューは変更された値をレンダリングします。

于 2012-10-19T06:19:56.927 に答える
1

モデルが有効でない場合は、同じモデルが返されます。2 回目は返されます。

最初のものと2番目のものの間にコードがないため、最初のものはまったく必要ないため、return view(model)とにかく呼び出します。つまり、最初のリターンを削除すると、ロジックは同じになります。

于 2012-10-18T18:02:55.037 に答える