2013-04-04 79 views
1

我一直在研究我的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中我「解決」了問題....但我不知道爲什麼第一個不起作用

我還沒有定義什麼特別的路線...只是使用默認的....我使用的地方,但我一直小心的命名,所以沒有衝突...

回答

0

通常你將有一個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

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>