如何在表单帖子中获取查询字符串值

时间:2009-04-14 17:43:59

标签: c# asp.net-mvc

我有一个网址:

/Account.aspx/Confirm/34a1418b-4ff3-4237-9c0b-9d0235909d76

和表格:

<% using (Html.BeginForm())
   { %>
    <fieldset>
        <p>
            <label for="password" class="instructions">
                Contraseña:</label>
            <%= Html.Password("password") %>
            <%= Html.ValidationMessage("password", "*") %>
        </p>
        <p>
            <input type="submit" value="Validar" />
        </p>
    </fieldset>
<% } %>

在控制器的动作中:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Confirm(string id, string password)
{
    //code
}

我想获取URL中的GUID值(确认后的部分)和输入密码的值。

我该怎么做?

修改

我已经注册了这条路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("Error.aspx/{*pathInfo}");
    routes.IgnoreRoute("Admin/{*pathInfo}");
    routes.MapRoute(
        "Default",
        "{controller}.aspx/{action}/{id}",
        new { controller = "Home", action = "Index", id = "" } 
    );
    routes.MapRoute("Root", "", 
            new { controller = "Home", action = "Index", id = "" });
}

我认为一切都很奇怪,但在确认操作的id参数中我得到一个空字符串。

3 个答案:

答案 0 :(得分:1)

这不是因为您正在发布表单中没有ID的表单吗?

您可以在表单页面上设置模型作为传入的ID,然后为此ID分配隐藏的输入值...

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<string>" %>
public ActionResult Confirm(string id)
{
   return View(id);
}

现在,ViewData.Model将包含您的ID。把它放在你的表格里。

<input type="hidden" id="id" name="id" value="<%= ViewData.Model %>" />

然后,当您提交表单时,它将通过ID。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Confirm(string id, string password)
{
   //...now you have access to ID and password
}

答案 1 :(得分:0)

在Global.asax.cs中,为Confirm定义一个路由,指定URL的最后一部分是参数。

例如:

"Account/Confirm/{id}"

MVC框架将自动解析URL并在id参数

中返回GUID

答案 2 :(得分:0)

您没有真正指出要回发的网址,只是表单中的网址,但请尝试以下操作:

var pathInfo = HttpContext.Request.PathInfo

这应该返回/Confirm/34a1418b-4ff3-4237-9c0b-9d0235909d76,如果您有一个与此页面关联的Route,只需将GUID命名为RouteValue,您可能会更容易。如果你有一条路线发布,我很乐意提供帮助。