0

ビューからコントローラーにデータを渡すのに問題があります。ビューモデル「TimeLineModel」で強く型付けされたビューがあります。最初に、コントローラーのアクションからビューモデルをこのビューに渡しました

public ActionResult confirmation(long socialbuzzCompaignId)
    {

      return View(new TimeLineModel() { socialBuzzCompaignId = socialbuzzCompaignId, BuzzMessages = model });

    }

これにより、アクションから情報を取得してビューに表示できますが、他のアクション POST があり、ビューモデルに何らかの特性を持たせることはできません

    [HttpPost]
    public ActionResult confirmation(TimeLineModel model)
    {


    } 

モデルのいくつかのプロパティを取得できますが、他のプロパティでは取得できません。たとえば、モデルのプロパティ「socialBuzzCompaignId」を取得できますが、「IEnumerable BuzzMessages」などの他のプロパティを取得できません。理由はわかりません!! これが私の見解の内容です

    @model Maya.Web.Models.TimeLineModel   
  @{
       ViewBag.Title = "confirmation";
    }
  @using (Html.BeginForm())
   {
     <h2>confirmation</h2>
       <fieldset>                       
          @foreach (var msg in Model.BuzzMessages)
          {                      
            <div class="editor-label">
              @msg.LongMessage
           </div>
           <br />
      }


    <p>
        <input type="submit" value="Save" />
    </p>

  </fieldset>

}
4

3 に答える 3

1
@foreach (var msg in Model.BuzzMessages)
{                      
    <div class="editor-label">
        @msg.LongMessage
        <input type="hidden" name="BuzzMessages.LongMessage" value="@msg.LongMessage" />
    </div>
}

LongMessages の配列を投稿します。次のような値を取得します。

[HttpPost]
public ActionResult confirmation(TimeLineModel model, FormCollection collection)
{
    var longMessages = collection["BuzzMessages.LongMessage"];
}
于 2012-05-24T12:39:08.263 に答える
1

フォーム要素内に BuzzMessages プロパティを含める必要があります。編集できないため、おそらく非表示を使用することをお勧めします。これには 2 つの方法があります。foreach最も簡単なのは、ループを実行する代わりに、ループを実行forしてインデックスで挿入することです。

@for (int i =0; i<Model.BuzzMessages.Count(); i++v)
{                      
    <div class="editor-label">
          @Model.BuzzMessages[i].LongMessage
          @Html.HiddenFor(m => m.BuzzMessages[i].LongMessage);
    </div>
       <br />
}

ただし、これを行うには、ビュー モデルで IEnumerable の代わりに IList を使用して、インデックスでアクセスする必要があります。

または、BuzzMessages クラスにちなんだ名前のエディター テンプレートを作成することもできます (名前は何でも構いません)。

@model BuzzMessagesClass

@Html.HiddenFor(m => m.LongMessages)
<!-- Include other properties here if any -->

そしてあなたのメインページで

@Html.EditorFor(m => m.BuzzMessages)

エディター テンプレートの詳細に混乱する場合は、http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/または検索スタック オーバーフローを確認してください。

于 2012-05-24T14:36:00.460 に答える
1

他の HTML POST メソッドと同様に、何らかの方法でデータをコントローラーに戻す必要があります。ページ上のデータを単に「表示」するだけでは、データは再バインドされません。

入力 (またはポストバックされるコントロール) のデータを適切なモデル プロパティ名に配置する必要があります。

そのため、FirstName という名前のモデル プロパティがあり、このデータを POST でモデルに再バインドする場合は、「入力非表示」(またはポストバックする同様のコントロール) を配置してモデルに戻す必要があります。 FirstName の ID は、POST でそのプロパティをモデルに再バインドします。

それがそれを説明することを願っています。

于 2012-05-23T21:25:30.190 に答える