2009-07-31 59 views
0

我的對話框是一個jQuery對話框,我的彈出使用<%Html.RenderPartial("MyUC")%>來調用用於對話框標記的用戶控件。如何控制器可以調用對話框中的值?如何在對話框中獲取Mvc控制器的值?


這是我的對話框代碼

$(function() { 
     $("#dialog").dialog({ 
      bgiframe: true, 
      autoOpen: false, 
      height: 300, 
      modal: true, 
      buttons: { 
       "Save": function() { 
        $("#edit").submit(); 
        $('#dialog p').empty(); 
       }, 
       Cancel: function() { 
        $(this).dialog('close'); 
        $('#dialog p').empty();       
       } 
      },     
      close: function() { 
       allFields.val('').removeClass('ui-state-error');     
      } 
     }); 

     submitHandler: function(form) { 
      $('#dialog p').append('Click \'OK\' to confirm Edit of <b>$' + $("#Item").val()); 
      $('#dialog').dialog('open'); 
     } 

     $("input[name=Edit]").click(function() { 

      var hd = $(this).next(); //will give u hidden div 

      $("#dialog input[id=ItemId]").val(hd.children("#ItemId").val()); 
      //$("#dialog input[id=CatId]").val(hd.children("#CatId").val()); 
      $("#dialog select > option[id=" + hd.children("#CatId").val() + "]").attr("selected", "selected"); 
      $("#dialog input[id=UnitId]").val(hd.children("#UnitId").val()); 
      $("#dialog input[id=SaleOffId]").val(hd.children("#SaleOffId").val()); 
      $("#dialog input[id=ItemCode]").val(hd.children("#ItemCode").val()); 
      $("#dialog input[id=ItemName]").val(hd.children("#ItemName").val()); 
      $("#dialog input[id=UnitCost]").val(hd.children("#UnitCost").val()); 
      $("#dialog input[id=QuantityRemaining]").val(hd.children("#QuantityRemaining").val()); 
      $("#dialog form").attr("post", "/Item/EditTest/" + hd.children("#ItemId").val(),'json'); 

      alert("/Item/EditTest/" + hd.children("#ItemId").val()); 
      $('#dialog').dialog('open'); 
     }) 
    .hover(
     function() { 
      $(this).addClass("ui-state-hover"); 
     }, 
     function() { 
      $(this).removeClass("ui-state-hover"); 
     } 
    ).mousedown(function() { 
     $(this).addClass("ui-state-active"); 
    }) 
    .mouseup(function() { 
     $(this).removeClass("ui-state-active"); 
    }); 
    }); 

,這是格包含對話框

<% Html.BeginForm("EditTest", "Item"); %> 
      <table> 
      <tr> 
       <td><b>ItemId</b></td> 
       <td><input id="ItemId" name="ItemId" type="text" disabled="disabled" /></td> 
      </tr> 
       <tr> 
       <td><b>CatId</b></td> 
       <td><input id="CatId" name="CatId" type="text" /> 
        <%--<%= Html.DropDownList("CatId", ViewData["AllCategory"] as SelectList)%>--%></td> 
      </tr> 
       <tr> 
       <td><b>SaleOffId</b></td> 
       <td><input id="SaleOffId" name="SaleOffId" type="text"/></td> 
      </tr> 
       <tr> 
       <td><b>UnitId</b></td> 
       <td><input id="UnitId" name="UnitId" type="text" /></td> 
      </tr> 
       <tr> 
       <td><b>ItemCode</b></td> 
       <td><input id="ItemCode" name="ItemCode" type="text" /></td> 
      </tr> 
       <tr> 
       <td><b>ItemName</b></td> 
       <td><input id="ItemName" name="ItemName" type="text" /></td> 
      </tr> 
       <tr> 
       <td><b>UnitCost</b></td> 
       <td><input id="UnitCost" name="UnitCost" type="text"/></td> 
      </tr> 
       <tr> 
       <td><b>QuantityRemaining</b></td> 
       <td><input id="QuantityRemaining" name="QuantityRemaining" type="text"/></td> 
      </tr> 
      <tr> 
       <td><input type="submit" id="Save" name="Save" value="Save" /></td> 
       <td><input type="submit" id="Cancel" name="Cancel" value="Cancle" onclick="back(-1);" /></td> 
      </tr> 
      </table> 
+0

你是什麼意思「可以調用價值」? – Freddy 2009-07-31 03:42:39

回答

0

如果你有一個T A vaule extBox例如有2種方法可以從頁面返回valuse。

在控制器中請求具體值。

[AcceptVerbs(HttpVerbs.Post)] 
public SomeViewController(string stringValueFromTextBoxOnPartialView){} 

另一種方法是將整個表單作爲FormCollection請求。這是你可以添加一個fiew輸入類型到你的頁面,你只需要一個對象在你的控制器中。

[AcceptVerbs(HttpVerbs.Post)] 
public SomeViewController(FormCollection form){} 

詳細描述可在http://www.asp.net/learn/mvc/tutorial-33-cs.aspx

+0

抱歉,請幫助我更好地瞭解您的問題。你有一個jQuery對話框中的表單,你想把數據發回控制器?您是否希望頁面發回以使用Ajax異步發生或者使用瀏覽器回發同步發生?如果您想使用Ajax,請查看docs.jquery.com/Ajax上的文檔,並在代碼「Save」中將ajax代碼添加到此函數中:function(){}這將使您可以將數據發送到控制器並且在不刷新頁面的情況下很好地關閉DialogBox。 – Webmonger 2009-07-31 20:04:30

0

你的對話框中找到必須包含元素,它的動作URL指向YorController/YourAction。把一些名稱屬性放在裏面。然後在按下對話框「確定」按鈕時提交表單 - 您將在控制器中傳遞值。

0

如果你的對話框有一個表單字段是不存在的開始,即jQuery的做吧,你可以有你的控制器要求它像這樣

this.Request["jQueryDialogElement"] 

this.Url.RequestContext.HttpContext.Request["jQueryDialogElement"] 

如果您不知道,您可以在其中插入一個斷點並查看它是否位於QueryString或Request對象的Form成員中。

+0

如果您還沒有,請考慮使用Firefox和Firebug來了解更多關於jQuery將您的UI加入的信息。 – 2009-07-31 08:15:08

相關問題