Изменение HTML-страницы с помощью C # при перезагрузке

#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. Я понял, что это было в комментариях после того, как я написал этот ответ. Я рад, что это помогло.