0

List<Listing>オブジェクトを別のアクション メソッドに渡し、そのメソッドがパラメーターを使用してビューを呼び出すようにしています。

何らかの理由で、私が渡しているパラメーターが null です。

以下はうまくいきます:

        public ActionResult SortListing(string categoryGuid)
    {
        var listingCategory = new ListingCategory();
        listingCategory = _tourismAdminService.GetByGuid<ListingCategory>(Guid.Parse(categoryGuid));
        var listings = new List<Listing>();

        foreach (var listing in _tourismAdminService.ListAllEntities<Listing>())
        {
            if (listing.CategoryId == listingCategory.Id)
            {
                listings.Add(listing);
            }
        }

        return RedirectToAction("Index", "Listing", listings);
    }

以下は、null として表示されるパラメーターを示しています。

        public ActionResult Index(List<Listing> listing)
    {
        var model = new ListListingsViewModel();
        IEnumerable<ListingCategory> categories = _service.ListAllEntities<ListingCategory>();

        if (categories != null)
        {
            model.Categories =
                categories.Select(
                    cat =>
                    new SelectListItem
                        {
                            Text =
                                cat.GetTranslation(stringA,
                                                   stringB).Name,
                            Value = cat.Guid.ToString()
                        }).ToList();
        }
        model.Listings = listing ?? _service.ListAllEntities<Listing>();

        return View(model);
    }

編集

エラーメッセージ:

キー 'SelectedCategoryGuid' を持つ ViewData アイテムのタイプは 'System.Guid' ですが、タイプは 'IEnumerable' である必要があります。

の上:

@Html.DropDownListFor(
m => m.SelectedCategoryGuid, 
Model.Categories, 
"Select a Category", 
new {
    id = "hhh",
    data_url = Url.Action("SortListing", "Listing") 
}
  )
4

1 に答える 1

2

RedirectToActionメソッドはブラウザに Http 302 応答を返します。これにより、ブラウザは指定されたアクションに対して GET 要求を行います。

HTTP はステートレスであることを忘れないでください。そのような複雑なオブジェクトを渡すことはできません。

クエリ文字列 (ID) を渡して 2 番目のアクションで再度値を取得するか、呼び出し間で永続的な媒体にデータを保持する必要があります。そのためにセッションまたはTempData(セッションはそのバックアップストレージです)の使用を検討できます。

http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

編集: コメントのとおり。はい、最初のメソッド自体からビューを呼び出すことができます。以下のコードは、文字列コレクションをIndexビュー (index.cshtml) に渡します。

public ActionResult SortedList(string categoryGuid)
{
   var listings = new List<Listing>();
   //fill the collection from the data from your db
   return View("Index",listings)
}

別のコントローラのビューにデータを渡したい場合は、View メソッドを呼び出すときにフル パスを指定できます。

return View("~/Views/User/Details.cshtml",listings)

stringsビューがこのようなリストに強く型付けされていると仮定します

@model List<string>
foreach(var item in Model)
{
 <p>@item</p>
}
于 2012-09-18T19:30:25.203 に答える