2013-03-20 1 views
3

Я создаю свой первый сайт MVC4, и я хотел бы показать сообщение об успешном завершении страницы. Я достиг с помощью ModelState.AddModelError(("", "Data successfully saved.");, но он отображается в красном цвете. Я хочу применять различные css во время выполнения на основе некоторых условий.Как применить CSS к Html.ValidationSummary во время выполнения

Спасибо.

+1

пинг набор кода .. где и г используя –

ответ

0

Обычно, когда результат действия метода успешный, происходит перенаправление, возможно, это то, что вы хотите, особенно если ваш результат не является результатом json. Но если вы возвращаете ту же точку зрения после своего поста, вы делаете это неправильно. Если ModelState действителен в сообщении, то есть если передано подтверждение (например, обязательные поля), и вы добавили сообщение об ошибке, выполнив ModelState.AddModelError(("", "Data successfully saved."), тогда вы делаете ModelState в недопустимое состояние. Вот почему у вас красный цвет.

Теперь если вы действительно хотите, чтобы вернуть ту же точку зрения, то я полагаю, у вас есть что-то вроде:

[HttpPost] 
    public ActionResult YourActionMethod(YourModel model) 
    {   
     // some code goes here 

     ModelState.AddModelError(("", "Data successfully saved.") 
     return View(", model); 
    } 

То, что вы должны иметь вместо этого что-то вроде этого:

 [HttpPost]   
     public ActionResult YourActionMethod(YourModel model) 
     {   
      // some code goes here 

      ViewBag.SuccessMessage = "Data successfully saved."; 
      return View(", model); 
     } 

Тогда на ваш взгляд что-то вроде:

@Html.ValidationSummary(true) 
if (!string.IsNullOrWhiteSpace(ViewBag.SuccessMessage)) { 
      <div class="success-summary"> 
       <p>@ViewBag.SuccessMessage</p> 
      </div>  
} 

Учтите, что вам не нужен дополнительный @ до if, этот код предполагает, что он находится в теге form, используя @using. А затем для css:

.success-summary { 
    color: #3366FF; 
} 

Фактически вы можете использовать ViewData или ViewBag. Чтобы узнать больше о различии двух вы можете visit this SO page.

UPDATE:

[HttpPost]   
      public ActionResult YourActionMethod(YourModel model) 
      {   
       // 
       If (ModelState.IsValid) { 
           @ViewBag.IsModelValid = true; 
           ModelState.AddModelError("", "Data successfully saved."); 
           return View(model); 
       } 

       ViewBag.SuccessMessage = "Data successfully saved."; 
       return View(", model); 
      } 

Ваше мнение:

@Html.ValidationSummary(false, "", new { @class= (ViewBag.IsModelValid!=null && ViewBag.IsModelValid) ? "success-summary" : "" }) 
+0

Я знаю, что вы пытаетесь объяснить. Я думаю, вы не поняли мой запрос, или я не очень хорошо его объяснил. В любом случае, спасибо за ваши усилия. Я попробую еще раз объяснить эту проблему: Давайте рассмотрим пример управления учетной записью по умолчанию, сгенерированной с помощью интернет-шаблона MVC4: это метод входа в систему: – MaxPayne

+0

Подробнее [IMG] http: // i45.tinypic.com/b6stiv.png[/IMG] http://i45.tinypic.com/b6stiv.png – MaxPayne

+0

Если вы снова прочтете мой ответ, вы заметите, что вам нужно вставить код ViewBag внутри 'if (ModelState.IsValid ... ', тогда сделайте остальную часть моего предложения. –

0

фон, я тоже ценю ваш ответ, но я согласен с MaxPayne, что вы не вполне дать ответ на вопрос , больше работы вокруг ИМО. Я тоже смотрю способ стиля ValidationSummary без дополнительного багажа с помощью ViewBag.

Я согласен с тем, что вы не должны возвращаться к одному и тому же представлению после сообщения, если нет ошибок, но я верю, что иногда бывает, что вы можете динамически изменять стиль ValidationSummary, не используя ViewBag.

До сих пор это мой единственный привести http://westcountrydeveloper.wordpress.com/2011/07/06/mvc-validation-part-4-styling-the-validation-controls/

Я полагаю, вы могли бы использовать некоторые JQuery изменить атрибуты CSS элемента, основанный на реакции Validation.

var valid = $("#formID").validate().element("#ElementID"); 
//or 
var valid = $('#formID').validate(); 
// Then use $(".ElementClass").css({}); to change the the style 
1

Я рекомендую использовать TempData вместо изменения validationsummary, а @von описал это очень хорошо. Используйте бутстрап.Вы могли бы сделать что-то вроде этого:

Контроллер

[HttpPost] 
    public ActionResult ManageUsers(UserViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      User obj = new User(); 
      obj.UserName = model.Email; 
      obj.FirstName = model.FirstName; 
      obj.LastName = model.LastName; 
      obj.Email = model.Email; 
      obj.Phone = model.Phone; 
      obj.Notes = model.Notes; 
      obj.Authorized = model.Authorized; 
      UserRepository.SaveUser(obj); 
      TempData["Success"] = "Yes"; 
     } 
     return View(model); 
    } 

Просмотр

@Html.ValidationSummary() 
@if (TempData["Success"] != null) 
{ 
       <div class="alert alert-success"> 
        <a href="#" class="close" data-dismiss="alert">&times;</a> 
        <strong>Success!</strong> The User account was created. 
       </div> 
}