#asp.net #asp.net-mvc
#asp.net #asp.net-mvc
Вопрос:
Я написал этот код с учетом. И изображение-это результат его проверки в Chrome.
@Html.CheckBox("KYCComplete", new { @name = "KYC", @id = "KYC" }) lt;label class="form-check-label" for="KYC"gt; KYC Complete ? lt;button id="Submit"gt;KYC Complete ?lt;/buttongt; lt;/labelgt;
В моем контроллере я использую это HttpPost
для использования флажка в качестве фильтра:
[HttpPost] public ActionResult Index(bool KYCComplete) { if (KYCComplete) { Listlt;BankAccountgt; b= db.BankAccounts.Where(p =gt; p.KYCComplete == true).OrderBy(b =gt; b.City).ToList(); return View(b); } return RedirectToAction("Index"); }
Все работает нормально, до этого момента. Свойство Только имя не переопределяется.
Ну, я хочу изменить свойство name флажка на «KYC» из «KYCComplete».
Итак, во-первых, я ищу, есть ли какие-либо способы переопределить помощников HTML. Я обнаружил, что на нескольких сайтах их невозможно переопределить.
Теперь я попробовал написать простой HTML-флажок, и я получаю ошибку.
Ошибка сервера в приложении»/».
Словарь параметров содержит нулевую запись для параметра «KYCComplete» системы типа, не допускающего значения null.Логическое значение’ для метода ‘System.Web.Mvc.Actionрезультатный индекс(Логическое значение)’ в ‘BankAccountsMgmt.Контроллеры.Контролер банковских счетов». Необязательный параметр должен быть ссылочным типом, типом, допускающим значение null, или объявлен в качестве необязательного параметра.
Имя параметра: параметры
Итак, как я могу изменить свойство name этого флажка на «KYC» и привязать его ввод, чтобы отфильтровать желаемый результат.
Описывая вопрос В двух словах
As, you have seen the output of the view of this checkbox has name property «KYCComplete».
I’ve requirement to change to «KYC», and HttpPost should work along with it, without effecting domain model.
Incase extra info. is Required
model:
namespace BankAccountsMgmt.Models { public class BankAccount { ... [Display(Name = "KYC Complete?")] public bool KYCComplete { get; set; } ... } }
controller:
using BankAccountsMgmt.Data; using BankAccountsMgmt.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace BankAccountsMgmt.Controllers { [CustomFilters.CustomExceptionFilter] public class BankAccountsController : Controller { BankAccountDBContext db = new BankAccountDBContext(); // GET public ActionResult Index() { //Implement your code Listlt;BankAccountgt; bank = db.BankAccounts.OrderBy(b=gt;b.City).ToList(); return View(bank); } //Implement other action methods [HttpPost] public ActionResult Index(bool KYCComplete) { if (KYCComplete) { Listlt;BankAccountgt; AccKYC = db.BankAccounts.Where(p =gt; p.KYCComplete == true).OrderBy(b =gt; b.City).ToList(); return View(AccKYC); } return RedirectToAction("Index"); } public ActionResult AddBankAccount() { return View(); } [HttpPost] public ActionResult AddBankAccount(BankAccount bankAccount) { if (ModelState.IsValid) { bankAccount.CalculateInterest(); db.BankAccounts.Add(bankAccount); db.SaveChanges(); ViewBag.Message = "Bank Account added successfully!"; return View("Details", bankAccount); } return View(bankAccount); } } }
полный обзор:
@model Listlt;BankAccountsMgmt.Models.BankAccountgt; @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } lt;h2gt;Bank Accounts Listlt;/h2gt; @using (Html.BeginForm("Index", "BankAccounts")) { lt;div class="form-check col-md-offset-8" align="center"gt; @Html.CheckBox("KYCComplete", new { @name = "KYC", @id = "KYC" }) lt;label class="form-check-label" for="KYC"gt; KYC Complete ? lt;button id="Submit"gt;KYC Complete ?lt;/buttongt; lt;/labelgt; lt;/divgt; lt;table class="table"gt; lt;trgt; lt;thgt; Account Holder Name lt;/thgt; lt;thgt; PAN Number lt;/thgt; lt;thgt; City lt;/thgt; lt;thgt; Gender lt;/thgt; lt;thgt; Amount lt;/thgt; lt;thgt; Interest Upto 30 Aug lt;/thgt; lt;thgt; Opening Date lt;/thgt; lt;thgt; KYC Complete? lt;/thgt; lt;thgt;lt;/thgt; lt;/trgt; @foreach (var item in Model) { lt;trgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.AccountHolderName) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.PAN) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.City) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.Gender) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.Amount) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.Interest) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.OpeningDate) lt;/tdgt; lt;tdgt; @Html.DisplayFor(modelItem =gt; item.KYCComplete) lt;/tdgt; lt;/trgt; } lt;/tablegt; lt;span id="total" class="form-check col-md-offset-6" align="center"gt;lt;bgt;Interest Total = lt;/bgt;@Model.Sum(model =gt; model.Interest).ToString("#.##") lt;/spangt; }
Комментарии:
1. Можете ли вы опубликовать свою модель и действие, а также полный обзор, пожалуйста?
2. Да, дано. пожалуйста, проверьте @Serge
Ответ №1:
Вы можете попробовать флажок Html вместо использования вспомогательного метода html:
Пример:
lt;input type="checkbox" id="KYC" name="KYC"gt; lt;label for="KYC"gt; KYC Completelt;/labelgt;
Ответ №2:
Имя элемента управления формой должно совпадать с именем параметра с методом действия, чтобы привязка модели работала.
Если вы измените имя флажка на «KYC», но оставите параметр действия как «KYCComplete», вы получите исключение, упомянутое в вашем вопросе.
Измените имя в обоих местах.
[HttpPost] public ActionResult Index(bool KYC) { if (KYC) { Listlt;BankAccountgt; b= db.BankAccounts.Where(p =gt; p.KYCComplete == true).OrderBy(b =gt; b.City).ToList(); return View(b); } return RedirectToAction(nameof(Index)); }
@Html.CheckBox("KYC", new { @id = "KYC" })