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是什么。

+0

我明白你说的对GET和POST什么....我有一个创建了get屏幕和等待输入....我只是没有提到这一点....我专注于处理屏幕上的信息......这是邮件进来的地方......我期望我需要有[HttpPost]属性来指定帖子,但我注意到,该代码似乎与HttpPost一样,或与我不明白的HttpPost ... – user2040849 2013-04-05 12:21:11

+0

(用尽了空间)....另一点我很困惑的是路线......我明白你对自定义路线的需求......但让我困惑的是代码(USUALLY)在我从模型转换为primitatve类型集时起作用......我也从模型开始,当我遇到问题时将其转换为基本类型(没有修改路线)...和代码开始工作?????我没有得到任何错误...代码只是挂起...我按下按钮,没有任何反应...没有控制器方法被调用,但没有错误....是的,我检查了呈现的HTML – user2040849 2013-04-05 12:26:16

+0

(用完空间)....无论如何,呈现的HTML看起来不错...在上面的例子中,它是一个简单的形式发布到控制器方法public ActionResult StartWorkOrderTask(IN​​T WorkCenterID,字符串VIN) – user2040849 2013-04-05 12:27:13

我仍然毫无头绪的原因....这里是萤火虫的输出:

<!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>