mvc справка по проверке на стороне сервера

У меня есть один вопрос, я уверен, что кто-то здесь точно знает ответ.

Я пытаюсь выполнить проверку на стороне сервера для текстового поля на веб-сайте MVC. Вот что у меня есть:

   <% using (Html.BeginForm("WebsiteLinks", "Home", FormMethod.Get))
       {%>   
    <%: Html.ValidationSummary("Please enter valid URL and try again.") %>
    <fieldset>
    <p>
    <%=Html.Label("Please enter URL:") %>
    <%=Html.TextBox("url")%>
    <%= Html.ValidationMessage("url", "*") %>

    <input type="submit" value="Crawl" />

    </p>
    </fieldset>
    <% } %>

А в контроллере у меня так:

public ActionResult WebsiteLinks(string url)
        {
            if (Regex.IsMatch(url, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?"))
            {
                ViewData["AnchorText"] = url;
                return View(new Website(url, "Url"));
            }
            return RedirectToAction("Index");
        }

Проверка работает нормально, но я хочу добиться того, что если данные недействительны, если данные не являются правильным URL-адресом, я хочу перенаправить на ту же страницу по умолчанию с сообщением, вероятно, здесь: <%= Html.ValidationMessage("url", "*") %>, но я не знаю как это сделать. Заранее спасибо, Лациале.

Редактировать:

После того, как я сделал все рекомендованные вами изменения, я получаю ошибку в шапке страницы просмотра. У меня есть Inherits="ViewPageBase", где Home — это имя класса, Home.cs в папке Models. В файле home.cs у меня есть это:

namespace LAX.Models
{
    public class UrlModel
    {
        [Required]
        [DisplayName("Please enter URL:")]
        [RegularExpression(@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?")]
        public string Url { get; set; }
    }
}

в контроллере у меня:

   [HttpPost]
        public ActionResult WebsiteLinks(UrlModel model)
        {
            /*
            if (Regex.IsMatch(url, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?"))
            {
                ViewData["AnchorText"] = url;
                return View(new Website(url, "Url"));
            }
            else
            {
                ModelState.AddModelError("url", "Error URL Format");
            }
            return RedirectToAction("Index");
             */

            if (ModelState.IsValid)
            {
                ViewData["AnchorText"] = model.Url;
                return View(new Website(model.Url, "Url"));
            }
            return RedirectToAction("Index");

        }

и в представлении у меня есть:

  <% using (Html.BeginForm("WebsiteLinks", "Home", FormMethod.Get))
       {%>   
    <%: Html.ValidationSummary("Please enter valid URL and try again.") %>
    <fieldset>
    <p>
        <%=Html.LabelFor(m => m.Url) %>
        <%=Html.TextBoxFor(m => m.Url) %>
        <%=Html.ValidationMessageFor(m => m.Url) %>

    <input type="submit" value="Crawl" />

    </p>
    </fieldset>
    <% } %>

Вот ошибка: «Не удалось найти имя типа или пространства имен« Home »(вам не хватает директивы использования или ссылки на сборку?)»

Есть идеи, что мне не хватает? Спасибо, Лациале.


person Laziale    schedule 09.09.2011    source источник
comment
У вас есть HomeController?   -  person hunter    schedule 09.09.2011


Ответы (1)


public ActionResult WebsiteLinks(string url)
{
    if (Regex.IsMatch(url, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?"))
    {
        ViewData["AnchorText"] = url;
        return View(new Website(url, "Url"));
    }
    else
    {    
        ModelState.AddModelError("url", "*");
    }

    return RedirectToAction("Index");
}

или вы можете сделать это более привлекательным с помощью DataAnnotations, Model и строго типизированного View

Модель:

public class UrlModel
{
    [Required]
    [DisplayName("Please enter URL:")]
    [RegularExpression(@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?")]
    public string Url { get; set; }
}

Контроллер:

public ActionResult WebsiteLinks(UrlModel model)
{
    if (ModelState.IsValid)
    {
        ViewData["AnchorText"] = model.Url;
        return View(new Website(model.Url, "Url"));
    }
    return RedirectToAction("Index");
}

Просмотр:

<%@ Page Language="C#" Inherits="ViewPageBase<UrlModel>" %>
<% using (Html.BeginForm("WebsiteLinks", "Home", FormMethod.Get)) {%>   
    <%: Html.ValidationSummary("Please enter valid URL and try again.") %>
    <fieldset>
    <p>
        <%=Html.LabelFor(m => m.Url) %>
        <%=Html.TextBoxFor(m => m.Url) %>
        <%=Html.ValidationMessageFor(m => m.Url) %>

        <input type="submit" value="Crawl" />
    </p>
</fieldset>
<% } %>
person hunter    schedule 09.09.2011