Razor / newb ie: как показать частичное представление в зависимости от результатов вызова функции - PullRequest
0 голосов
/ 05 мая 2020

У меня есть частичное представление, которое я sh показываю на странице (используя Razor) в результате некоторой обработки в контроллере (и связанной с ним служебной функции)

Частичное представление должно стать видимым , то после его использования я могу перенаправить на следующий этап в потоке.

Как сделать так, чтобы партиал стал видимым?

Рабочий процесс аналогичен следующему:

Load page

User enters some details and clicks 'check details' button

CheckDetails(formData):

    If details meet criteria, then 

    show PartialView A else

    show PartialView B

Спасибо.

NJMUK

1 Ответ

0 голосов
/ 05 мая 2020

Этого можно достичь несколькими способами, и если вы решили использовать для этого что-то вроде JQuery, станет доступно больше возможностей. Чтобы сделать это исключительно с помощью C# и Razor, вам нужно будет сделать что-то вроде этого.

В контроллере вам понадобятся два метода для представления:

[HttpGet]
public IActionResult DynamicDisplay()
{
    return View();
}

[HttpPost]
public IActionResult DynamicDisplay(ActionsModel actionsModel)
{
    TempData.Add("DisplayGreeting", actionsModel.DisplayGreeting);
    TempData.Add("DisplayGenericMessage", actionsModel.DisplayGenericMessage);
    TempData.Add("ShowErrorMessage", actionsModel.ShowErrorMessage);
    return View();
}

В HttpGet, вы просто возвращаете представление. В методе HttpPost вам необходимо использовать модель, которая фиксирует состояние / входные данные от пользователя. Оттуда вы можете использовать словарь TempData (как в моем примере) или другую модель, чтобы задать условия, которые вы хотите оценить в представлении Razor.

В представлении вам понадобится что-то вроде этого:

@model DemoRazor.Models.ActionsModel

@{
    ViewData["Title"] = "DynamicDisplay";
}

<h1>Dynamic Display</h1>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="DynamicDisplay">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group form-check">
                <label class="form-check-label">
                    <input class="form-check-input" asp-for="DisplayGreeting" /> @Html.DisplayNameFor(model => model.DisplayGreeting)
                </label>
            </div>
            <div class="form-group form-check">
                <label class="form-check-label">
                    <input class="form-check-input" asp-for="DisplayGenericMessage" /> @Html.DisplayNameFor(model => model.DisplayGenericMessage)
                </label>
            </div>
            <div class="form-group form-check">
                <label class="form-check-label">
                    <input class="form-check-input" asp-for="ShowErrorMessage" /> @Html.DisplayNameFor(model => model.ShowErrorMessage)
                </label>
            </div>
            <div class="form-group">
                <input type="submit" value="Save" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>


@if (TempData["DisplayGreeting"] != null && (bool)TempData["DisplayGreeting"])
{
    <div class="row">
        <div class="col-md-12">
            <h3>Hello there!</h3>
        </div>
    </div>
}

@if (TempData["DisplayGenericMessage"] != null && (bool)TempData["DisplayGenericMessage"])
{
    <div class="row">
        <div class="col-md-12">
            <h3>This is a generic message</h3>
        </div>
    </div>
}

@if (TempData["ShowErrorMessage"] != null && (bool)TempData["ShowErrorMessage"])
{
    <div class="row">
        <div class="col-md-12">
            <h3>This is an error message</h3>
        </div>
    </div>
}

Вот модель, которую я использовал для представления:

public class ActionsModel
{
    public bool DisplayGreeting { get; set; }
    public bool DisplayGenericMessage { get; set; }
    public bool ShowErrorMessage { get; set; }
}

Затем вы можете получить доступ к словарю TempData в блоке кода, используя символ @. У вас будет доступ к моделям, указанным в верхней части страницы, или к любому объекту, доступному в контексте Razor.

...