2011-01-10 22 views
0

私のASPの.Net MVC 2アプリケーションでは、ユーザーはアイテムのリストが表示され、リストがデータベースに保存される前に確認をクリックする必要があります。HttpPostメソッドで確認リスト(IEnumerable)を取得する方法は?

ユーザーが確認をクリックすると、HttpPostメソッドでパラメータがnullになります。 HttpPostメソッドが呼び出されるまではすべて動作します。この時点で、永続化する必要があるリストはnullです。

確認値はどのようにして取得できますか?

私はHttpGetメソッドでTempDataを使用しようとしましたが、HttpPostメソッドではTempDataもnullです。

ここにコントローラコードがあります。

public ActionResult Confirm() 
    { 
     List<ConfirmVehicleModel> vehicles = GetAllVehicles(); 
     return View(vehicles); 
    } 

    [HttpPost] 
    public ActionResult Confirm(List<ConfirmVehicleModel> model) 
    { 

     //model is null, why ? 

     UploadVehiclesModelService service = new Models.UploadVehiclesModelService(); 
     service.StoreVehicles(model, User.Identity.Name); 

     return RedirectToAction("Index", "UploadVehicles"); 
    } 

そして、ここで確認ビューは次のとおりです。任意の助け

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<RM.Application.Models.ConfirmVehicleModel>>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Confirm 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<h2> 
    Confirm that the vehicles below should be added.</h2> 
<table> 
    <tr> 
     <th> 
      ReferenceType 
     </th> 
     <th> 
      ReferenceName 
     </th> 
    </tr> 
    <% foreach (var item in Model) 
     { %> 
    <tr> 
     <td> 
      <%= Html.Encode(item.ReferenceType) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.ReferenceName) %> 
     </td> 
    </tr> 
    <% } %> 
</table> 
<div> 
    <% using (Html.BeginForm()) 
     { %> 
    <input type="submit" value="Confirm" /> 
    | 
    <%= Html.ActionLink("Back to upload form", "Index") %> 
    <% } %> 
</div> 
</asp:Content> 

おかげで、

種類が

ボブ

答えて

1

あなたHTML.BeginFormを(については)外にありますあなたが渡したい値を囲むべき場所。

試してみてください。

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<h2>Confirm that the vehicles below should be added.</h2> 
<% using (Html.BeginForm()) 
    { %> 
    <table> 
     <tr> 
      <th> 
       ReferenceType 
      </th> 
      <th> 
       ReferenceName 
      </th> 
     </tr> 
     <% foreach (var item in Model) 
      { %> 
     <tr> 
      <td> 
       <%= Html.Encode(item.ReferenceType) %> 
       <%= Html.HiddenFor(model => item.ReferenceType)%> 
      </td> 
      <td> 
       <%= Html.Encode(item.ReferenceName) %> 
       <%= Html.HiddenFor(model => item.ReferenceName)%> 
      </td> 
     </tr> 
     <% } %> 
    </table> 
<div> 
    <input type="submit" value="Confirm" /> 
    | 
    <%= Html.ActionLink("Back to upload form", "Index") %> 
    <% } %> 
</div> 

+0

こんにちはニコラス、ご返信ありがとうございます。私はHtml.BeginFormを移動しました。パラメータList モードはまだnullです。 FormCollectionもパラメータとして試しましたが、それもnullです。 LABEL要素を使用する必要がありますか? FORM要素は、どのデータをポストバックするのかをどのように知っていますか?ありがとうございますBob – bobentelect

+0

@bobentelect - あなたはHtml.HiddenFor –

+0

のおかげで、隠し値としてフォーム内の値を埋め込むことができます。 – bobentelect

0

ニコラスのアドバイスを助けました。 foreachループをforループに置き換え、Html.HiddenForを使用しました。

<% for (int i = 0; i < Model.Count(); i++) 
      { %> 
     <%= Html.HiddenFor(model=>model[i].ReferenceType) %> 
     <%= Html.HiddenFor(model=>model[i].ReferenceName) %> 
     <tr> 
      <td> 
       <%= Html.Encode(Model[i].ReferenceType) %> 
      </td> 
      <td> 
       <%= Html.Encode(Model[i].ReferenceName) %> 
      </td> 
     </tr> 
     <% } %> 

私はビューのトップラインを(以前はIEnumerable、今Listに)変更しました。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<RM.Application.Models.ConfirmVehicleModel>>" %>\\ 

HttpPost方法のList<ConfirmVehicleModel>モデルパラメータは、現在設定されます。

+0

お手伝いします!あなたがチャンスを取ったときに答えを投票する; - > –

関連する問題