7

我对 MVC 并不陌生,所以我对为什么在单击提交按钮时无法更改 POST 的 URL 感到有些困惑。

我有一个名为 PandoraRemovalTool.cshtml 的简单视图

@{
    ViewBag.Title = "PandoraRemovalTool";
}
@using (Html.BeginForm("PandoraGetDocsList"))
{
    <h2>Pandora Removal Tool</h2>    
    @Html.Label("Member number:")
    @Html.TextBox("txtMemberNumber")
    <br />
    <input type="submit" value="Search"/>
}

因为它很简单,我没有使用模型,我只想发布 txt 值。但是 URL 有点奇怪。它指向网站中的这条路径:

<form action="/Administration/PandoraRemovalTool?Length=18" method="post" novalidate="novalidate">    
    <h2>Pandora Removal Tool</h2>
    <label for="Member_number:">Member number:</label>
    <input id="txtMemberNumber" name="txtMemberNumber" type="text" value=""/>        
    <br>
    <input type="submit" value="Search"/>
</form>

我不明白它从哪里得到 length=18 。我想发布到这个方法:

[HttpPost]
public ActionResult PandoraGetDocsList(string txtMemberNumber)
{
    return RedirectToAction("PandoraRemovalTotal2", new {MemberNum = txtMemberNumber });
}

public ActionResult PandoraRemovalTotal2(string MemberNum)
{
    return View();
}

请帮忙?

4

3 回答 3

7

替换@using (Html.BeginForm("PandoraGetDocsList"))@using (Html.BeginForm())

PandoraGetDocsList是您在帖子中收到的长度为 18 的字符串

如果要将其重定向到操作PandoraGetDocsList,请执行以下操作:

@using (Html.BeginForm("PandoraGetDocsList", "Administration", new { txtMemberNumber = someString }))

说明:Html.BeginForm 不接受作为字符串的参数。

于 2014-07-11T11:09:05.147 回答
3

没有只接受stringas 参数的重载。它正在使用重载BeginForm(this HtmlHelper htmlHelper, Object routeValues),因此,它会尝试序列化string作为object.

string对象的情况下,唯一的公共属性是Length,并且由于没有使用 Length 参数定义的路由,它会将属性名称和值作为查询字符串参数附加。

您正在寻找的重载是BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName).

@using (Html.BeginForm("PandoraGetDocsList", "controller name here"))
于 2014-07-11T11:10:39.650 回答
-1

使用过载。 @using (Html.BeginForm("PandoraGetDocsList", null))

于 2016-01-19T14:09:36.363 回答