2011-05-19 15 views
0

我有這樣的模式:MVC2:如何將數據從局部視圖提交給他的控制器?

public class Package 
{ 
    public string CustomerName { get; set; } 
    public List<Product> Products { get; set; } 
    public int Id { get; set; } 
} 

public class Product 
{ 
    public int Quantity { get; set; } 
    public string Name { get; set; } 
    public int Id { get; set; } 
} 

我有一個「創建一個新包的觀點和一個或多個創建產品」創建小號PartialView

如何在不離開視圖的情況下將產品信息提交給產品的控制器?

這裏是我的產品的Partialview代碼:

<% using (Ajax.BeginForm("Create", "Product", new AjaxOptions())) {%> 
    <%: Html.ValidationSummary(true) %> 

    <fieldset> 
     <legend>Fields</legend> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.Name) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(model => model.Name) %> 
      <%: Html.ValidationMessageFor(model => model.Name) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.Quantity) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(model => model.Quantity) %> 
      <%: Html.ValidationMessageFor(model => model.Quantity) %> 
     </div> 

<%-- <p> 
      <input type="submit" value="Create" /> 
     </p>--%> 
    </fieldset> 

<% } %> 

謝謝

+0

你需要使用AJAX。 – SLaks 2011-05-19 02:56:21

+0

@SLaks,是的,我知道,但是哪個電話呢?如何將字段數據傳遞給控制器​​? – Tuizi 2011-05-19 03:09:50

+0

用上面的表格,你只需要取消註釋提交按鈕和在頂部。如果你這樣做,你根本不需要編寫任何javascript代碼 – 2011-05-20 00:03:17

回答

0

您可以使用AJAX來解決問題。該代碼在YourAction的YourController中向post 3的值下面呈現。

jQuery('#YourButton').click(function (event) { 

    var jqxhr = $.post("YourController/YourAction", { 
     lastName: $("#tbLastName").val(), 
     firstName: $("#tbFirstName").val(), 
     id: $("#id").val() 
    }, 
    function (data) { 
     $('#WhereResultAppear').html(data); //can be deleted 
    }) 

    .success(function() { 
     $('#InCaseOfSuccess').html(data); //can be deleted 
    }) 

    .error(function (jqXHR, status, error) { 
     $('#InCaseOfError').html(data); //can be deleted 
    }) 

    .complete(function() { 
     $('#WhenActionIsComplete').html(data); //can be deleted 
    }); 
}); 
+0

是的,我會使用$ .post()。感謝 – Tuizi 2011-05-19 20:12:16

0

在局部視圖中爲您的表單提供一個ID。然後使用JQuery通過序列化表單發送數據。

$.post("controller/action", $("#formId").serialize(), 
    function(data) { 
    alert("Data Loaded: " + data); 
    }); 

和Controller

Package pakage = new Package(); 

    UpdateModel(pakage); 
+0

我用jQuery的加載方法加載部分視圖,當我這樣做時,部分視圖被渲染,但部分視圖的形式不是! – Tuizi 2011-05-19 14:48:51

+0

你能顯示你的部分視圖代碼嗎? – 2011-05-19 16:52:45

+0

我已經更新了答案,爲您提供了PartialView的代碼 – Tuizi 2011-05-19 18:03:09

0

雖然你可以編寫代碼來序列化數據與其他的答案提到,我會考慮在

@using (Ajax.BeginForm("ActionOnController", new AjaxOptions{})) 
{ 

} 

這將周圍的田野爲你做這一切(只要你包含必要的JavaScript,例如jquery.unobtrusive-ajax.min.js)

查看AjaxOptions文檔。這允許您(除其他之外)在將值發回之後更新另一節。你可以用這個來表示成功

馬丁

相關問題