0

ここにいる誰かが答えを知っていると確信しています。

MVC Web サイトのテキストボックスにサーバー側の検証を入れようとしています。ここに私が持っているものがあります:

   <% 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 はクラスの名前であり、Models フォルダーにある Home.cs です。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>
    <% } %>

エラーは次のとおりです。

私は何が欠けているのですか?ありがとう、ラツィアーレ

4

1 に答える 1

0
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>
<% } %>
于 2011-09-09T15:58:23.980 に答える