html.beginForm不会调用控制器方法
我一直在研究我的asp.net mvc 4一段时间,现在有一个问题......其实我有两个相关的问题...让我们从简单的第一个。html.beginForm不会调用控制器方法
我有很多意见,除了这一次所有的工作....我已经剥离下来,并让它变得更简单,试图找到错误......但下面依然不能调用控制器的方法:
@using TBS.Etracs.Web.Main.Areas.WorkOrder.Models
@model WorkOrderInputModel
@{
ViewBag.Title = "Work Orders Per Pad";
}
@using (Html.BeginForm("StartWorkOrderTask", "Mobile",
new {WorkCenterID=Model.WorkCenterID, VIN=Model.VIN }))
{
<div>
<label><strong>WorkCenterID:</strong></label>
<label>@Model.WorkCenterID</label>
</div>
<div>
<label><strong>VIN:</strong></label>
<label>@Model.VIN</label>
</div>
<input type="submit" value="Start Work Order" />
}
控制器方法归类为“MobileController”和这里控制器方法签名:
[HttpPost] //Tried with and without this attribute...
public ActionResult StartWorkOrderTask(int WorkCenterID, string VIN)
{
}
我已经把一个破发点中的控制器方法....它从来没有被调用时,表单上的输入 按钮被击中... 。
我已经看到了这种问题所造成前: 1)有一个以上的beginForm 2)中不具有JavaScript文件包括 3右)样式参数....我不知道为什么,但包括一些 控制风格造成的输入按钮无法工作...... 4)我相信我已经打别人,但他们没有想到,现在....
我用萤火检查html,我没有看到任何错误...它正在创建一个带有指向该方法的dataurl的表单...,并且WorkCenterID和VIN的值填充了...可能导致probem的问题? ?????
有没有人有建议要看什么或尝试调试呢?
我的第二个问题也涉及控制方法的调用....我知道,我们应该能有这样的方法:在beginForm
@using(Html.BeginForm("StartWorkOrderTask", "Mobile"))
public ActionResult StartWorkOrderTask(WorkOrderInputModel model)
这
但是,当我这样做时,约90%的时间控制器方法确实被调用....我点击输入按钮,没有任何反应.....通过明确地将参数放在beginForm中我“解决”了问题....但我不知道为什么第一个不起作用
我还没有定义什么特别的路线...只是使用默认的....我使用的地方,但我一直小心的命名,所以没有冲突...
通常你将有一个get和后,你get会使用相同的模型,您的文章,然后可以像下面这样运行:
public ActionResult StartWorkOrderTask(WorkOrderInputModel model)
其中workorderinputmodel是您的视图模型,这将允许简单:
@using(Html.BeginForm())
和你也不需要任何自定义路线。然而,随着
public ActionResult StartWorkOrderTask(int WorkCenterID, string VIN)
{
}
你会需要像这样的自定义路线:字符串{}这样就可以自动映射里
routes.MapRoute("Nameforthis", "area/Controller/View/{WorkCenterID}/{VIN}", new { controller = "namehere", action = "namehere" });
通知的属性名称。
另一种解决方案是在表单值集合中接收并传递无路由值,然后可以读取该属性。
以下链接汁可以帮助:How can a formcollection be enumerated in ASP.NET MVC?
最后,你会得到一个404,或错误,或做你的表格根本没有提交? 阿洛斯您是否检查了呈现的HTML以查看您的代码生成的帖子URL是什么。
我仍然毫无头绪的原因....这里是萤火虫的输出:
<!DOCTYPE html>
<html class="ui-mobile">
<head>
<base href="http://localhost:58028/WorkOrder/Mobile/ViewWorkOrdersByPad?WorkCenterID=159">
<meta charset="utf-8">
<title>Work Orders Per Pad</title>
<meta content="width=device-width, initial-scale=1" name="viewport">
<link href="/Content/Mobile/css/jquery.mobile-1.2.0.min.css" rel="stylesheet">
<link href="/Content/Mobile/css/jquery.mobile-1.2.0.css" rel="stylesheet">
<link href="/Content/Mobile/css/jquery.mobile.theme-1.2.0.css" rel="stylesheet">
<link rel="stylesheet" href="/Content/Site.Mobile.css">
<link rel="stylesheet" href="/Content/Mobile/css/jquery.mobile-1.2.0.css">
<link rel="stylesheet" href="/Content/Mobile/css/jquery.mobile.structure-1.2.0.css">
<link rel="stylesheet" href="/Content/Mobile/css/jquery.mobile.theme-1.2.0.css">
<script src="/Scripts/jquery-1.7.1.js">
<script src="/Scripts/jquery.mobile-1.3.0.min.js">
<script>
</head>
<body class="ui-mobile-viewport ui-overlay-c">
<div class="ui-page ui-body-c ui-page-active" data-theme="c"
data-role="page" data-url="/WorkOrder/Mobile/ViewWorkOrdersByPad?WorkCenterID=159"
tabindex="0" style="min-height: 321px;">role=
"page" theme="c"
mobilePage=Object { element={...}, uuid=1, eventNamespace=".page1", more...}title=
"Work Orders Per Pad"
<div class="ui-loader ui-corner-all ui-body-a ui-loader-default">
mobileLoader=Object { element={...}, uuid= 0, eventNamespace=".loader0", more...}
</body>
</html>
我明白你说的对GET和POST什么....我有一个创建了get屏幕和等待输入....我只是没有提到这一点....我专注于处理屏幕上的信息......这是邮件进来的地方......我期望我需要有[HttpPost]属性来指定帖子,但我注意到,该代码似乎与HttpPost一样,或与我不明白的HttpPost ... – user2040849 2013-04-05 12:21:11
(用尽了空间)....另一点我很困惑的是路线......我明白你对自定义路线的需求......但让我困惑的是代码(USUALLY)在我从模型转换为primitatve类型集时起作用......我也从模型开始,当我遇到问题时将其转换为基本类型(没有修改路线)...和代码开始工作?????我没有得到任何错误...代码只是挂起...我按下按钮,没有任何反应...没有控制器方法被调用,但没有错误....是的,我检查了呈现的HTML – user2040849 2013-04-05 12:26:16
(用完空间)....无论如何,呈现的HTML看起来不错...在上面的例子中,它是一个简单的形式发布到控制器方法public ActionResult StartWorkOrderTask(INT WorkCenterID,字符串VIN) – user2040849 2013-04-05 12:27:13