0

我使用这样的 URL 请求 ASP.NET MVC 控制器:

http://mysite.com/controller/myaction/Invalid%23name%25x

Invalid%23name%25x参数在哪里

public ActionResult MyAction(string id) {
  return View();
}

GET 请求工作正常。

MyAction 视图如下所示:

@using (Html.BeginForm()) {
   ...
   <input name="Save" type="submit" value="Save" />
}

生成的 HTML 是:

<form action="/Controller/MyAction/Invalid#name%x" method="post">
    ...
    <input name="Save" type="submit" value="Save" />
</form>

当我单击“保存”时,表单被发布并且 POST 请求转到

http://mysite.com/controller/myaction/Invalid#name%x

即初始 URL 被解码。这意味着 POST 操作仅接收参数的第一部分 - “无效”

[HttpPost]
public ActionResult MyAction(string id, ...) {
  return View();
}

如何防止Html.BeginForm解码初始 URL 以保留初始状态?

4

2 回答 2

2

通过ActionNameController以您的形式

@using (Html.BeginForm("ActionName", "Controller")) {
于 2013-07-24T13:26:22.037 回答
0

我个人建议您不要id用作字符串,因为正如您所见,字符串中可以包含很多单词.. 让它意味着它通常的作用(数值)。

使用类似的东西 http://mysite.com/controller/myaction?Name=Invalid%23name%25x

public ActionResult MyAction(string Name) {
    return View();
}

我想这对你有用..

于 2013-07-24T13:50:03.997 回答