我正在尝试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.我做错了什么?非常感谢。
答案 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">