我已经在我的asp.net mvc 4上工作了一段时间了,我有一个问题......实际上我有两个相关的问题......让我们先从简单的问题开始。
我有很多观点和所有工作,除了这一个......我已经将它剥离下来并且很容易找到错误...但是以下仍然没有调用控制器方法:
@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)我确信我已经击中了其他人,但他们现在还没有想到......
我使用firebug来检查html并且我没有看到任何错误...它正在创建一个带有指向方法的dataurl的表单....其中填充了WorkCenterID和VIN的值...什么可能导致探测??????
是否有人建议查看什么或尝试调试此内容?
我的第二个问题也涉及调用控制器方法....我知道我们应该能够有这样的方法:
public ActionResult StartWorkOrderTask(WorkOrderInputModel model)
这个在beginForm上
@using(Html.BeginForm("StartWorkOrderTask", "Mobile"))
但是大约90%的时间我这样做控制器方法确实被调用....我点击输入按钮没有任何反应.....通过显式地将参数放在beginForm中我“解决”了问题....但我不知道为什么第一个不起作用
我没有为路线定义任何特别的东西......只是使用了默认值......我正在使用区域,但是我一直小心命名,所以没有冲突...
答案 0 :(得分:0)
通常你会有一个获取和一个帖子,你的获取将使用与你的帖子相同的模型,然后可以这样运行:
public ActionResult StartWorkOrderTask(WorkOrderInputModel model)
其中workorderinputmodel是您的VIEW模型,这将允许简单:
@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或错误,或者你的表单根本不提交? Alos让您检查呈现的HTML以查看代码生成的帖子URL。
答案 1 :(得分:0)
我仍然对原因一无所知....这是萤火虫的输出:
<!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>