0

ASP.NET フォームの使用経験はありますが、MVC は初めてです。

ポストバック時に共有ビューからデータを取得するにはどうすればよいですか?

ASP.NET Forms では、次のように記述できます。

ASP.NET フォーム:

モデルコード:

public class MyModelItem
{
    // Just TextBox is enough for editing this
    public string SimpleProperty { get; set; }

    // For this property separate NestedItemEditor.ascx is required
    public MyModelNestedItem ComplexProperty { get; set; }
}

public class MyModelNestedItem
{
    public string FirstProperty { get; set; }        
    public string SecondProperty { get; set; }
}

行動:

MyModelNestedItem を編集するためのコントロールは別の ASCX コントロール NestedItemEditor.ascx です

これは単なる例です。 MyModelNestedItem はもっと複雑になる可能性があります。私が何を意味するのかを説明したいだけです。

このアイテムを編集用に表示すると、1 つの asp:TextBox と 1 つの NestedItemEditor.ascx が表示されます。ページのポストバックで、両方からデータを収集しています。それだけです。

MVC の問題:

このシナリオを MVC で実装しようとしているときは、カスタマイズされた EditorFor を使用しています (UIHint を使用して共有ビューを作成することにより)。したがって、この共有ビューViews\Shared\EditorTemplates\MyModelNestedItem.cshtmlは、既に MyModelNestedItem プロパティにあるデータを表示できるようになりましたが、新しく入力されたデータを返す方法がわかりません。

親コントローラーが投稿リクエストを受け取ると、データは Request.Form にあるように見えますが、どの方法でデータに到達するのが文明的ですか? 確かに、最善の解決策は、データがMyModelItem.ComplexPropertyに自動的にフェッチされる場合です。

4

2 に答える 2

2

post で呼び出されるアクションは、次のようにする必要があります。

    [HttpPost]
    public ActionResult Index(MyViewModel mdl)

次に、フォーム上に入力コントロール (または非表示の入力) を持つモデルのすべてのプロパティは、フォームに入力された (または非表示の入力の場合はフォームに渡された、または JavaScript によって変更された) データを持ちます。

これは、ビューで参照されるモデルが MyViewModel であることを前提としています。

于 2012-06-15T12:24:51.960 に答える
0

複雑な型を使用してコントローラーに ActionResult メソッドを記述することは、私にとっては簡単に機能しました。

 public class Topic
{
    public Topic()
    {

    }
    public DetailsClass Details
    {
        get;
        set;
    }

}

public class DetailsClass
{
    public string TopicDetails
    {
        get;
        set;
    }
}

景色:

@modelTopic
@using (Html.BeginForm("Submit","Default"))
{
  @Html.EditorFor(m=>m.Details)
  @:<input type="submit" />
 }

コントローラー:

  public ActionResult Index()
    {

        Topic topic = new Topic();
        return View( topic); 
    }


    public ActionResult Submit(Topic t)
    {
        return View(t);
    }

送信Topic tされると、エディター内で入力した値が含まれます (私のサンプルでは、​​複合型の DetailsClass 用のカスタム エディターがあると仮定します)。

于 2012-06-15T12:26:57.857 に答える