Этого можно достичь несколькими способами, и если вы решили использовать для этого что-то вроде 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.