【问题标题】:MVC5 - issues sending form parameters to controllerMVC5 - 发送表单参数到控制器的问题
【发布时间】:2015-05-04 07:47:26
【问题描述】:

我对此很陌生,所以如果我遗漏了一些明显的东西,我深表歉意。

我正在尝试使用 Html.BeginForm 将两个字符串值发送到控制器。

这是控制器代码(在“BlogsController”中):

[Route("{type}/{variable}")]
public ActionResult BlogResult(string type, string variable)
{
}

我正在尝试发送一个“隐藏”参数作为“类型”(以便我识别用户正在执行哪种查询 - 在这种情况下,字符串是“k”)和一个“文本框”字符串作为“变量”。这是 Razor 中的表单:

@using (Html.BeginForm("BlogResult", "Blogs", FormMethod.Post))
{
@Html.Hidden("type", "k")
@Html.TextBox("variable")
<input type="submit" name="Submit Keyword" />
}

但是,当提交按钮被按下时,它只是刷新当前页面,并没有调用正确的控制器。

我已经通过各种网站进行了彻底的搜索,但我找不到令人满意的解决方案。因此,任何帮助将不胜感激。

【问题讨论】:

  • 您将什么模型类绑定到您的视图?
  • 您使用的是模型吗?如果是这样,请使用 @Html.TextBoxFor()
  • 你展示的方法是用[HttpPost]装饰的吗?
  • 目前我没有在这部分中使用模型——我正在使用 LINQ 中的关键字在动作方法(未显示)中与模型进行交互。我有其他 ActionLinks 用于不同类型的搜索(即按年份或按作者),其中“类型”变量返回不同的字母。
  • 已在该方法上尝试过 [HttpPost],但这似乎不起作用。如果我尝试:@using (Html.BeginForm("BlogResult", "Blogs", new { type = "y", variable = "xxxx"},FormMethod.Post)) ...它确实有效,但是当然可以,我正在发送静态数据...

标签: c# razor asp.net-mvc-5


【解决方案1】:

问题应该出在路由映射中。您应该使用它来指定动态路由。 ES:

[Route("blog/{articleId}")]
public ActionResult GetArticle(int articleId) { ... }

可能当您创建表单时,动态值仍然不存在(您稍后会创建它们)。 现在尝试删除路由属性,看看它是否有效。

【讨论】:

  • 谢谢。没有路由映射我试过了,可惜还是不能使用action方法。
  • 你能发布从那个视图生成的 html 吗?
  • 这是按下按钮前后的源代码:
    跨度>
  • 好的,显然它只是找不到正确的控制器和方法(表单标签中的操作属性为空)。你能发布完整的控制器吗?并尝试使用 [HttpPost] 属性来装饰您的操作
  • 好的,首先肯定删除那个 Route 属性。当你想为你的行动绘制一条特殊的路线时,你就放了它,这里不是这种情况。其次,我对您的代码进行了测试,它工作正常(没有 Route 属性)。
【解决方案2】:

更改我的路线映射后,表单帖子现在可以根据需要工作。

我正在使用:

routes.MapMvcAttributeRoutes();

用于定义属性路由,所以我决定将其注释掉并恢复RouteConfig中的默认代码。然后表单将正确的数据发布到正确的操作方法。因此,这一定是我的自定义属性路由的问题。

感谢您的所有建议和帮助。

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多