0

この 2 日間でこの問題を解決しようとしています。残念ながら、私にはそれができません。私の「フォーム」がクラスに null 値を送信する理由がわかりません。私が何をしなければならないか分かりますか?本当にこの問題は緊張します。

パラメーター ディクショナリには、'SportsStore.WebUI.Controllers.CartController' のメソッド 'System.Web.Mvc.RedirectToRouteResult AddToCart(Int32, System.String)' の null 非許容型 'System.Int32' のパラメーター 'Id_tow' の null エントリが含まれています。 '。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメーター名: parameters 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ArgumentException: パラメーター ディクショナリには、メソッド 'System.Web.Mvc.RedirectToRouteResult AddToCart(Int32, System.String)' の null 非許容型 'System.Int32' のパラメーター 'Id_tow' の null エントリが含まれています。 SportsStore.WebUI.Controllers.CartController'. オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

このフォームは次のとおりです。

@model SportsStore.WebUI.Models.SomeView
@using SportsStore.WebUI.HtmlHelpers
@using SportsStore.WebUI.Controllers
@using SportsStore.Entities

@{
    ViewBag.Title = "List";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>List</h2>

@foreach (var p in Model.Towar)
{
<div class="item">
<h3>@p.Nazwa</h3>
@p.Opis

@using(Html.BeginForm("AddToCart", "Cart")) {
@Html.HiddenFor(x => @p.Id_tow)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<input type="submit" value="+ Add to cart" />
}

<h4>@p.Cena.ToString("c")</h4>
</div>
}

<h2>List</h2>

@foreach (var b in Model.Kategorie)
{
<div class="item">
<h3>@b.Nazwa</h3>
</div>
}

<div class="pager">
@Html.PageLinks(Model.PagingInfo, x => Url.Action("List",
new {page = x, category = Model.CurrentCategory}))
</div>

私の意見では、正しい値を表示しますが、null をクラスに送信します (HTML ソース)

<div class="item">
<h3>Piłka</h3>
Piłka Firmy Nike

<form action="/Cart/AddToCart" method="post"><input data-val="true" data-val-number="The field Id_tow must be a number." data-val-required="The Id_tow field is required." id="p_Id_tow" name="p.Id_tow" type="hidden" value="1" /><input id="returnUrl" name="returnUrl" type="hidden" value="/" /><input type="submit" value="+ Add to cart" />
</form>
<h4>59,80 zł</h4>
</div>

null値を取得するコントローラーカートの一部:

public RedirectToRouteResult AddToCart(int Id_tow, string returnUrl)
            {
                Towar product = repository.Towar
                .FirstOrDefault(p => p.Id_tow == Id_tow);
                if (product != null)
                {
                    GetCart().AddItem(product, 1);
                }

                return RedirectToAction("Index", new { returnUrl });
            }

私が自分の値を入れれば、すべてが正しく機能しますが、もちろんこれは問題を解決しません

public RedirectToRouteResult AddToCart(int Id_tow = 1, string returnUrl = "www.gmail.com")
            {
                Towar product = repository.Towar
                .FirstOrDefault(p => p.Id_tow == Id_tow);
                if (product != null)
                {
                    GetCart().AddItem(product, 1);
                }

                return RedirectToAction("Index", new { returnUrl });
            }

あなたの助けがなければ、私はこれを修正することができません。ありがとう

@foreach (var p in Model.Towar)
{
<div class="item">
<h3>@p.Nazwa</h3>
@p.Opis

@{
    int Id_tow = @p.Id_tow;
}


@using(Html.BeginForm("AddToCart", "Cart")) {
@Html.HiddenFor(x => Id_tow)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<input type="submit" value="+ Add to cart" />
}

<h4>@p.Cena.ToString("c")</h4>
</div>
}
4

2 に答える 2

1

あなたは置き換えることができます

public RedirectToRouteResult AddToCart(int Id_tow, string returnUrl)
            {
                Towar product = repository.Towar
                .FirstOrDefault(p => p.Id_tow == Id_tow);
                if (product != null)
                {
                    GetCart().AddItem(product, 1);
                }

                return RedirectToAction("Index", new { returnUrl });
            }

public RedirectToRouteResult AddToCart(Towar tow, string returnUrl)
            {
                Towar product = repository.Towar
                .FirstOrDefault(p => p.Id_tow == tow.Id_tow);
                if (product != null)
                {
                    GetCart().AddItem(product, 1);
                }

                return RedirectToAction("Index", new { returnUrl });
            }

または、使用することもできますHtml.Hidden("Id_tow", @p.Id_tow)が、ビューとコントローラーの間の依存関係が少し脆弱になるため、これはお勧めできません。

于 2012-08-08T09:19:38.073 に答える