16

タクシーの予約に関するデータが取り込まれたモデルのビューがあります。

モデルには、時間、価格、車種を含む見積もりの​​リストがあり、foreach を使用してリストを表示します。foreah がループするたびに、フォームと送信ボタンが作成され、コントローラーの「BookingStage1」アクションに移動します。特定の見積もりの​​予約参照が入力される隠しフィールドも追加しました。

そのため、コントローラーでアクションにヒットしたときに、ビューの場合と同じようにモデルが完全に読み込まれることを期待していました。しかし、それはnullであり、データはまったくありません。

ユーザーがさまざまな検索、結果、予約画面を進むにつれて、入力されたモデルを多数のコントローラー間で渡したいと思っていました...

完全に設定されたモデルをビューから次のコントローラーに渡すことは可能ですか?

ありがとう

私の検索結果ページには、次のフォームがあります。

using (Html.BeginForm("BookingPage1", "SearchResults", FormMethod.Post))

以下のように、フォームに隠しフィールドもあります。

<input type="hidden" id="BookingID" name="ChosenBookingID" value='@item.QuotationID' />

次のようなコントローラーに投稿します。

[HttpPost]
    public ActionResult BookingPage1(string ChosenBookingID, Route theRoute)
    {
        //this does noting yet.
        return View();
    }

しかし、 theRoute は常に空です:(

4

1 に答える 1

40

この完全な例がお役に立てば幸いです。

これは、タクシーの乗車に関する情報を保持するTaxiInfoクラスです。

namespace Taxi.Models
{
    public class TaxiInfo
    {
        public String Driver { get; set; }
        public Double Fare { get; set; }
        public Double Distance { get; set; }
        public String StartLocation { get; set; }
        public String EndLocation { get; set; }
    }
}

TaxiInfo(s) のListを保持する便利なモデルもあります。

namespace Taxi.Models
{
    public class TaxiInfoSet
    {
        public List<TaxiInfo> TaxiInfoList { get; set; }

        public TaxiInfoSet(params TaxiInfo[] TaxiInfos)
        {
            TaxiInfoList = new List<TaxiInfo>();

            foreach(var TaxiInfo in TaxiInfos)
            {
                TaxiInfoList.Add(TaxiInfo);
            }
        }
    }
}

ホーム コントローラーには、デフォルトのIndexアクションがあります。この例では、2 人のタクシー ドライバーを作成し、TaxiInfo に含まれるリストに追加します。

public ActionResult Index()
{
    var taxi1 = new TaxiInfo() { Fare = 20.2, Distance = 15, Driver = "Billy", StartLocation = "Perth", EndLocation = "Brisbane" };
    var taxi2 = new TaxiInfo() { Fare = 2339.2, Distance = 1500, Driver = "Smith", StartLocation = "Perth", EndLocation = "America" };

    return View(new TaxiInfoSet(taxi1,taxi2));
}

ビューのコードは次のとおりです。

@model Taxi.Models.TaxiInfoSet
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@foreach(var TaxiInfo in Model.TaxiInfoList){
    <form>
        <h1>Cost: $@TaxiInfo.Fare</h1>
        <h2>Distance: @(TaxiInfo.Distance) km</h2>
        <p>
            Our diver, @TaxiInfo.Driver will take you from @TaxiInfo.StartLocation to @TaxiInfo.EndLocation
        </p>
        @Html.ActionLink("Home","Booking",TaxiInfo)
    </form>
}

ActionLinkは、次のように定義されているホームコントローラーの予約アクションへのリダイレクト (および適切な TaxiInfo オブジェクトの受け渡し) を担当します。

    public ActionResult Booking(TaxiInfo Taxi)
    {
        return View(Taxi);
    }

これにより、次のビューが返されます。

@model Taxi.Models.TaxiInfo

@{
    ViewBag.Title = "Booking";
}

<h2>Booking For</h2>
<h1>@Model.Driver, going from @Model.StartLocation to @Model.EndLocation (a total of @Model.Distance km) for $@Model.Fare</h1>

ビジュアル ツアー:

インデックス ビュー

予約ビュー

于 2013-05-02T14:27:05.097 に答える