MVC (Razor) вспомогательный класс (ValidationImage) не рендерится / не работает? - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь использовать следующий вспомогательный класс

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.CompilerServices;
using System.Web.Mvc;
using System.Web.Routing;

namespace myNamespace
{
    public static class ValidationHelper
    {

        public static MvcHtmlString ValidationImage(this HtmlHelper helper, string name)
        {
            if (helper.ViewData.ModelState[name] == null || helper.ViewData.ModelState[name].Errors == null || helper.ViewData.ModelState[name].Errors.Count == 0)
            {
                return MvcHtmlString.Empty;
            }
                var tag = new TagBuilder("img");
                tag.Attributes.Add("src", "../Content/Images/check_bg_invalid.png");
                tag.Attributes.Add("alt", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
                tag.Attributes.Add("title", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
                tag.Attributes.Add("class", HtmlHelper.ValidationMessageCssClassName);
                return MvcHtmlString.Create(tag.ToString(TagRenderMode.SelfClosing));
        }
    }
}

И использую это в представлении:

@Html.ValidationImage("FirstName")

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

Итак, мои:

@Html.TextBox("FirstName", null, new { @class = "my_input" })

в том же виде (все в пределах @ Html.BeginForm)

Это мой класс model.cs:

 public class QuoteModel
    {
        [Required(ErrorMessage = "You must specify a First Name.")]
        public string First Name { get; set; }

    }

А это мой класс controller.cs:

public ActionResult Quote()
{
    //return View();
    var model = new QuoteModel();
    return View(model);
}

[HttpPost]
public ActionResult Quote(QuoteModel model)
{
    if (ModelState.IsValid)
    {
        try
        {
        }
        catch (Exception)
        {
            return View(model);
        }
    }
    return RedirectToAction("QuoteSuccess");
}

public ViewResult QuoteSuccess()
{
    return View();
}

Имейте в виду, что я мог сделать опечатку во всех предыдущих кодовых блоках.

Первоначально,Я использовал

@Html.ValidationMessage("FirstName") 

и сообщение об ошибке сработало бы после нажатия кнопки отправить.Я пытаюсь теперь использовать вышеупомянутый помощник для ValidationImage, но ничего не срабатывает (и сообщение об ошибке не отображается).Также ничего не выводится с тегом <img>.На странице не возникает ошибок.

Кроме того, у меня есть два других вопроса: 1) Я также хотел бы отобразить сообщение об успешном завершении проверки (т. Е. Небольшое изображение с надписью «ОК»), но явозникли проблемы с тем, чтобы просто подняться на работу в первую очередь.2) Раньше мне не удавалось (до использования помощника) отобразить подтверждение на стороне клиента.

Я использую

@{ Html.EnableClientValidation(); }

в том же виде.Я поместил это сверху (после @model).Имеет ли значение размещение?

Я также использовал следующее в своем _layout.cshtml

<script language="javascript" src="@Url.Javascript("jquery.validate.min")" type="text/javascript"></script>
<script language="javascript" src="@Url.Javascript("jquery.validate.unobtrusive.min")" type="text/javascript"></script>

Обратите внимание, что я использую помощник, поэтому нет необходимости в расширении ".js" - это сработало впрошлое и проявляется в виде источника.Так что никаких проблем нет.

Наконец, у меня действительно настроен мой web.config:

  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

Любые мысли по поводу любой из моих проблем (особенно основной) очень ценятся.

1 Ответ

0 голосов
/ 02 мая 2011

Мне кажется, что ваше проверочное изображение будет выводиться на страницу только в случае сбоя проверки на стороне сервера.Это означает, что ваша проверка на стороне клиента не может показать изображение, так как оно не будет существовать в разметке HTML (return MvcHtmlString.Empty;)

Если вы хотите, чтобы проверка работала на стороне клиента (и показатьизображение), вам, возможно, придется проделать некоторую работу, чтобы подключиться к существующей проверке.Здесь есть статья о пользовательской проверке:

http://www.codeproject.com/Articles/98376/Including-custom-client-side-validations-in-your-A.aspx

Хотя это может быть немного чрезмерно сложно - может быть более простой способ подключиться к нему (хотя я не могу найти одинтолько сейчас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...