asp.net mvc2表单帖子不断扩展浏览器网址

时间:2011-03-28 12:24:58

标签: asp.net-mvc url asp.net-mvc-2 http-post

我正在尝试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>

我第一次点击按钮时工作正常,浏览器显示的网址为http://localhost:1824/Search/Post。但是,当我第二次点击按钮时,浏览器网址会更改为http://localhost:1824/Search/Search/Post而我会收到404.我做错了什么?非常感谢。

4 个答案:

答案 0 :(得分:1)

您正在使用表单操作的相对网址。我建议使用UrlHelper和Html表单助手。这两者都会产生合适的绝对网址。使用Razor语法的示例:

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

 @using(Html.BeginForm( "post", "search" ))
   {
    ...
   }

答案 1 :(得分:0)

您可以尝试将action设置为/Search/Post,但如果您的应用将安装到非root位置,则会中断。一种可靠的方法是使用类似

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

答案 2 :(得分:0)

尝试使用BeginForm HtmlHelper而不是手动编写form标记:

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

听起来好像浏览器将其解释为相对URL,当当前网址在/Search/之下时,它就是相对于它。 HtmlHelper 应该考虑到这一点,但是YMMV。

答案 3 :(得分:0)

您需要在操作网址的开头添加/。

为什么不允许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">