0

私はそれを「標準的な」方法で行いました:

    public ActionResult Respondent()
    {
        return View(Session["Respondent"]); //passing the model
    }

    [HttpPost]
    public ActionResult Respondent(Respondent resp)
    {
        repository.UpdateRespondent(Respondent resp);
        Session["Respondent"] = respondent; //put back into session
        return View(respondent); //redraw view, passing in respondent
    }

そして、それは機能します。MVC が FORM 値を自動的に収集するためにのみ、POST アクションで応答者モデルを渡しています。ビュー内には、すべてのプロパティに対してこれらがあります。

@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.FirstName)
    @Html.EditorFor(model => model.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName)

    // and so on...
}

私の質問は、(Session に存在する) Session オブジェクトを既に使用している場合、Session オブジェクトをビュー内のモデルとして使用して、HttpPost がすべての検証を含めて機能する方法はありますか? では、どのようにして値が収集され、セッションに戻されるのでしょうか?

ありがとうございました。

4

1 に答える 1

2

私があなたの質問を理解していれば、説教のベストプラクティスはさておき、セッションオブジェクトをモデルとして渡すことができます。

2つの警告:

  1. セッションオブジェクトは、渡されたときにキャストする必要があります

    View((RespondentObject)Session ["Respondent"])を返します

  2. ビューで、オブジェクトタイプにバインドすることを忘れないでください

    @model perseus.Models.RespondentObject

コントローラのSessionからの読み取りとSessionへの書き込みをお勧めします。

フォームを作成するために複数のパーシャルを使用することを指摘しました。2つの選択肢があります:

  • すべてのオブジェクトを含むアクションが受け取るモデルを作成します。
  • すべてのパラメーターを個別にアクションに渡します。

オブジェクトを使用するのが悪い形式である理由を尋ねました。

  • タイプされていないので
  • セッションが不安定であるため(信頼性が低い)

そうは言っても、あなたはあなたのアプリとアーキテクチャを最もよく知っています。あなたはあなたの決定を下し、それらをサポートしなければなりません。私は純粋主義者ですが、ベストプラクティスは宗教ではなくガイドであると信じています。状況はさまざまです。

于 2013-01-30T19:27:38.567 に答える