Сообщение формы asp.net mvc2 продолжает расширять URL браузера - PullRequest
0 голосов
/ 28 марта 2011

Я пробую ASP.NET MVC2. У меня есть контроллер с именем SearchController и папка просмотра с именем Search, содержащая Search.aspx. В моем контроллере у меня есть:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Post()
        {
            HPSLucene.Models.Arbitrary arb = new HPSLucene.Models.Arbitrary();
            arb.Title = "Post received";
            return View("Search",arb);
        }

На мой взгляд, у меня есть:

<form action="Search/Post" method="post">
    <label><% Response.Write(Model.Title); %></label>
    <input type="Submit" Value="First" Name="submitButton"/>
    </form>

Он работает нормально при первом нажатии кнопки, и браузер отображает URL-адрес http://localhost:1824/Search/Post. Однако, когда я нажимаю кнопку второй раз, URL-адрес браузера меняется на http://localhost:1824/Search/Search/Post, и я получить 404. Что я делаю не так? Большое спасибо.

Ответы [ 4 ]

1 голос
/ 28 марта 2011

Вы используете относительный URL для действия формы. Я предлагаю использовать либо UrlHelper Html помощник формы. Оба из них будут производить подходящие абсолютные URL. Примеры с синтаксисом Razor:

 <form action="@Url.Action( "post", "search" )" ...

или

 @using(Html.BeginForm( "post", "search" ))
   {
    ...
   }
0 голосов
/ 28 марта 2011

Вам нужен / в начале вашего действия URL.

Почему бы не позволить asp.net заняться этим для вас и использовать:

<% using (Html.BeginForm("Post", "Search")) { %>

<label><% Response.Write(Model.Title); %></label>
<input type="Submit" Value="First" Name="submitButton"/>

<% } %>

Что даст вам

<form action="/Search/Post" method="post">
0 голосов
/ 28 марта 2011

Попробуйте использовать BeginForm HtmlHelper вместо того, чтобы писать тег form вручную:

http://msdn.microsoft.com/en-us/library/dd505244.aspx

Похоже, что браузер интерпретирует его как относительный URL и, когдатекущий URL-адрес меньше /Search/, поэтому он соответствует этому.HtmlHelper должен учитывать это, но YMMV.

0 голосов
/ 28 марта 2011

Вы можете попробовать установить action на /Search/Post, но это может привести к поломке, если ваше приложение будет установлено в некорневой папке.Надежный способ - использовать что-то вроде

<form action="<%= Url.Content("~/Search/Post") %>" ...
...