1

UpdateModelデータベース内のコピーを更新するために使用する前に、POSTデータから非数値要素を削除したいと思います。これを行う方法はありますか?

// TODO: it appears I don't even use the parameter given at all, and all the magic
// happens via UpdateModel and the "controller's current value provider"?
[HttpPost]
public ActionResult Index([Bind(Include="X1, X2")] Team model) // TODO: stupid magic strings
{
    if (this.ModelState.IsValid)
    {
        TeamContainer context = new TeamContainer();

        Team thisTeam = context.Teams.Single(t => t.TeamId == this.CurrentTeamId);
        // TODO HERE: apply StripWhitespace() to the data before using UpdateModel.
        // The data is currently somewhere in the "current value provider"?
        this.UpdateModel(thisTeam);
        context.SaveChanges();

        this.RedirectToAction(c => c.Index());
    }
    else
    {
        this.ModelState.AddModelError("", "Please enter two valid Xs.");
    }

    // If we got this far, something failed; redisplay the form.
    return this.View(model);
}

簡潔さをお詫びします。一晩中これに取り組んでいます。うまくいけば、私の質問は十分に明確ですか?また、これは、数時間のドキュメントのトロール網で取得できる可能性のある初心者の質問の一種であるため、申し訳ありませんが、時間のプレッシャーがあります...

4

2 に答える 2

1

これにはカスタムモデルバインダーを使用できると思います。スコット・ハンゼルマンは、例としてDateTimeを2つの別々の部分に分割するという概念を使用して、プロセスを説明する記事をここに持っています。

于 2010-05-19T14:53:21.353 に答える
1

アクションメソッドのパラメータで自動モデルバインディングを使用する代わりに、投稿されたFormCollectionを受け入れて操作することができます。UpdateModel(1)この特別なコレクションの値を変更してから、(2) /を使用してモデルを手動でバインドできる場合がありますTryUpdateModel

例えば、

public ActionResult Index(FormCollection formCollection)
{
    DoWhateverToFormCollection(formCollection);
    Team model;
    // TO-DO: Use TryUpdateModel here and handle more nicely
    // Should also pass in binding whitelist/blacklist to the following, if didn't remove from the formCollection already...
    UpdateModel<Team>(model, formCollection);    
    // rest of your code...

}

うまくいけば、これは宣伝どおりに機能するはずです、そして幸運を祈ります!

于 2010-05-26T00:35:58.980 に答える