#javascript #c# #html #asp.net-mvc
#javascript #c# #HTML #asp.net-mvc
Вопрос:
На моей html-странице у меня есть предупреждение по умолчанию в верхней части страницы, в котором говорится, что нужно заполнить все области ввода.
<span style="color:gray" class="help-block">Please enter value for all input fields.</span>
Это страница для добавления некоторых материалов в базу данных. Когда я нажимаю кнопку «добавить», она перенаправляется ActionResult
в моем C#
коде. И внутри этого, в соответствии с введенными входными значениями, мой код либо вставляет материал в базу данных, либо перезагружает страницу добавления, что означает неудачную вставку.
[HttpPost]
public ActionResult InsertStuff(Stuff stuff)
{
if (stuffManager.InsertStuff(stuff))
return RedirectToAction("ListStuffs", "StuffController"); //successfully inserted!!
else
return RedirectToAction("AddNewStuffForm", "StuffController"); //reload page, here is where i'd like to change warning in html
}
В другой части я хотел бы загрузить ту же AddNewStuffForm
страницу, но я хочу, чтобы мое предупреждение изменило цвет с серого на красный, как в:
<span style="color:red" class="help-block">Please enter value for all input fields.</span>
Я не знаю, как это сделать, поскольку, как я понял, мне нужно отправить что-то html
в else
часть моего C#
кода, но я не знаю, как это сделать. Я действительно провел некоторое исследование, и некоторые решения предлагают использовать некоторые методы, такие как Page_Load
. Однако я действительно начинающий уровень html
, и у меня возникают трудности с предлагаемыми решениями. Кто-нибудь может просто объяснить, что делать? Заранее спасибо.
Комментарии:
1. RedirectToAction() сообщает вашему браузеру, что он должен перейти на другую страницу. Это далеко не лучший выбор для выполнения чего-то подобного. Как вызывается это действие? Это вызов AJAX? Затем вы должны обрабатывать результаты в javascript. Вы отображаете свои представления только в MVC? Затем примените стили соответствующим образом в возвращаемом представлении. Вам нужно указать больше о вашем дизайне
2. Есть много способов сделать это, вы можете сохранить контрольные значения в ViewData для своей части else и можете перепроверить значения ViewData при просмотре представления и соответствующим образом изменить свой стиль, что-то вроде этого-заблокировать»> Пожалуйста, введите значение для всех полей ввода.</span>
3. @Pranay я очень благодарен за ваш ответ! Это действительно помогло. Я потратил полдня, чтобы выяснить, вы сэкономили мне оставшиеся полдня.
4. @Pranay если хотите, перепишите свой комментарий в качестве ответа, чтобы я мог его принять.
Ответ №1:
Есть много способов сделать это, вы можете сохранить контрольные значения в ViewData для своей части else и можете перепроверить значения ViewData при просмотре представления и соответствующим образом изменить свой стиль, что-то вроде этого
<span style="color:@(ViewData["fail"])%;" class="help-block">Please enter value for all input fields.</span>
Спасибо 🙂
Ответ №2:
Похоже, вы на правильном пути.
- Обычно после успешной публикации вы делаете перенаправление на новую страницу.
- После неудачной публикации вы останетесь на той же странице, отображая соответствующую ошибку. Вот где вы в настоящее время ошибаетесь.
Таким образом, в вашем случае вместо перенаправления после ошибки вы можете просто вернуть текущую страницу. Не видя кода, который вы используете для создания своей начальной страницы, я не знаю точно, как это будет выглядеть в вашем случае, но обычно это что-то вроде:
[HttpPost]
public ActionResult InsertStuff(Stuff stuff)
{
if (stuffManager.InsertStuff(stuff))
return RedirectToAction("ListStuffs", "StuffController"); //successfully inserted!!
else
return View("AddNewStuffForm", "StuffController", stuff); //reload page, here is where i'd like to change warning in html
}
Третий параметр здесь — ваша исходная модель — обычно его можно использовать для повторного заполнения страницы значениями, введенными пользователем.
Обычно я бы также сначала проверял ввод пользователя ASP.Net MVC вы могли бы использовать что-то вроде проверки ModelState.IsValid
Ответ №3:
Заполните ViewData
, как показано ниже:
[HttpPost]
public ActionResult InsertStuff(Stuff stuff)
{
if (stuffManager.InsertStuff(stuff)){
return RedirectToAction("ListStuffs", "StuffController");//successfully inserted!!
ViewData["PageMessage"] = "The message you want to print in case of success";
}
else{
return RedirectToAction("AddNewStuffForm", "StuffController"); //reload page, here is where i'd like to change warning in html
ViewData["PageMessage"] = "The message you want to print in case of fail";
}
}
Затем распечатайте ваше сообщение ViewData
в вашем представлении следующим образом:
<p style="color:red;">@ViewData["PageMessage"]</p>
Комментарии:
1. В комментариях к вопросу было предложено использовать ViewData. В моем случае работает сохранение цвета в ViewData, а не текста предупреждения. Спасибо за ваш ответ.
2. Я понял, что это было в комментариях после того, как я написал этот ответ. Я рад, что это помогло.