C # Razor страниц Частичное представление Модель пуста при отправке - PullRequest
0 голосов
/ 05 июля 2019

Я новичок на страницах Razor и пытаюсь создать страницу с частичным представлением. Частичное представление имеет выпадающий список и текстовый ввод для поля Количество и кнопку отправки. Частичное представление отображается правильно, но когда я нажимаю кнопку «Отправить», модель, переданная в код, не имеет значения.

Вот код, который у меня есть

_PartialAddons.cshtml

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
@model Public.Areas.Register.AddonListDto
<form method="post">
    @Html.HiddenFor(Model => Model.Quantity)
    <div style="padding:5px;">
        <b>NZD $45</b>
    </div>
    <div>
        <div style="padding:5px;">
            <select id="skuSelect" asp-for="SelectedSkus" asp-items="@(new SelectList(Model.AddonSkus,"SkuId","SkuName"))" class="form-control">
                <option>Please select one</option>
            </select>
        </div>

        <div style="padding:5px;">
            <input type="hidden" name="handler" value="Quantity" />
            <input asp-for="Quantity" name="Quantity" class="form-control ng-untouched ng-pristine ng-valid" max="999" min="0" style="width:150px;" type="number" value="0" id="@Model.Id">
        </div>
    </div>
    <div style="padding:5px;">
        <a class="btn green" asp-page-handler="AddToCart">Add to Cart</a>
    </div>
</form>

Это главная страница

@foreach (var addons in Model.StoreAddonList)
                {
                    <div class="panel card panel-default" style="margin-top:10px;">
                        <div class="panel-heading card-header" role="tab">
                            <div class="panel-title">
                                <div class="accordion-toggle" role="button" aria-expanded="true">
                                    <div accordion-heading="" style="width:100%;">
                                        @addons.Title
                                        <i class="pull-right float-xs-right glyphicon glyphicon-chevron-down"></i>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="panel-collapse collapse in show" role="tabpanel" style="overflow: visible; height: auto; display: block;" aria-expanded="true" aria-hidden="false">
                            <div class="panel-body card-block card-body">
                                <div style="padding-top:10px;background-color:#ffffff;clear:both;">
                                    <div style="width:100%">
                                        <div style="float:left;width:20%;text-align:left;">
                                            Name
                                        </div>
                                        <div style="float:left;width:30%;padding-left:10px;">
                                            @addons.Description
                                        </div>
                                    </div>
                                    <div style="float:left;width:40%;padding-left:10px;">
                                        <div>
                                            @{
                                                await Html.RenderPartialAsync("_PartialAddons.cshtml", addons);
                                            }
                                        </div>
                                    </div>
                                    <div style="clear:both;">
                                        &nbsp;
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                }

Это Index.cshtml.cs для обработки отправки

public ActionResult OnGetAddToCart(AddonListDto addOnList)
{
    var sass = Quantity;
    var tass = SelectedSkus;

    return null;
}

AddonListDto является нулевым в методе OnGetAddToCart. Я пытался заставить это работать в течение последних двух дней. Любая помощь будет очень ценится

1 Ответ

1 голос
/ 05 июля 2019

Если вы хотите отправить свои данные, вам нужно использовать OnPost вместо OnGet на бритвенных страницах и установить имя обработчика в теге <form>.Например:

обработчик:

public ActionResult OnPostAddToCart(AddonListDto addOnList)

частичное представление:

@model Public.Areas.Register.AddonListDto
<form method="post" asp-page-handler="AddToCart">
@Html.HiddenFor(Model => Model.Quantity)
<div style="padding:5px;">
    <b>NZD $45</b>
</div>
<div>
    <div style="padding:5px;">
        <select id="skuSelect" asp-for="SelectedSkus" asp-items="@(new SelectList(Model.AddonSkus,"SkuId","SkuName"))" class="form-control">
            <option>Please select one</option>
        </select>
    </div>

    <div style="padding:5px;">
        <input type="hidden" name="handler" value="Quantity" />
        <input asp-for="Quantity" name="Quantity" class="form-control ng-untouched ng-pristine ng-valid" max="999" min="0" style="width:150px;" type="number" value="0" id="@Model.Id">
    </div>
</div>
<div style="padding:5px;">
   <input type="submit" value="Add To Cart" class="btn btn-primary" />
</div>
</form>
...