2013-04-04 3 views
1

Я работал над моим asp.net mvc 4 некоторое время, и у меня есть проблема ... На самом деле у меня есть две проблемы, которые связаны ... Начнем с простого один первый.html.beginForm не вызывает метод контроллера

У меня есть много мнений и всю работу для этого, кроме .... я раздели его и сделали его простым, чтобы попытаться найти ошибку ... но следующее еще НЕ ВЫЗВАТЬ CONTROLLER МЕТОД:

@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, заполненными ... что может быть причиной probem? ?????

Есть ли у кого-нибудь предложение о том, что посмотреть или что попытаться отладить это?

Мой второй вопрос также с участием призвании методов контроллера .... Я знаю, что мы должны быть в состоянии иметь метод, как это:

public ActionResult StartWorkOrderTask(WorkOrderInputModel model) 

это на BeginForm

@using(Html.BeginForm("StartWorkOrderTask", "Mobile")) 

Но примерно в 90% случаев, когда я делаю это, метод контроллера вызван .... Я нажимаю кнопку ввода, и ничего не происходит ..... путем явного ввода аргументов в beginForm «решаю» проблему .... но я понятия не имею, почему первое не работает

Я не определил ничего особенного для маршрутов ... просто используется по умолчанию .... Я использую области, но я был осторожен в наименовании так что нет никакого конфликта ...

ответ

0

Обычно вам бы получить и пост, прибудете будет использовать ту же модель, как ваш пост, а затем может работать следующим образом:

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

Я понимаю, что вы говорите о ГЭТ и пост .... у меня есть ГЭТ, что создает экран и ждет ввода .... Я просто не упоминал об этом .... Я сосредоточился на обработке информации с экрана ..., где находится сообщение ... Я ожидал, что мне нужно будет есть атрибут [HttpPost], чтобы указать сообщение, но я заметил, что код, похоже, работает так же или с HttpPost, который я не понимаю ... – user2040849

+0

(закончилось пространство) .... Другой момент, о котором я смущаюсь, - это маршруты ... Я понимаю, что вы говорите о необходимости настраиваемых маршрутов ... но то, что меня смущает, - это код (USUALLY) работает, когда я перехожу из модели к набору примитивных типов ... Я также начинаю с модели и когда у меня возникают проблемы, преобразуйте ее в примитивные типы (без изменение маршрутов) ... и код начинает работать ????? Я не получаю никаких ошибок ... код просто зависает ... Я нажимаю кнопку, и ничего не происходит ... не вызывается метод контроллера, но нет ошибки .... Да, я проверил визуализированный html – user2040849

+0

(закончилось space) .... в любом случае рендеринг HTML выглядит хорошо ... в приведенном выше примере это простая форма, которая публикует метод контроллера public ActionResult StartWorkOrderTask (int WorkCenterID, строка VIN) – user2040849

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> 
Смежные вопросы