2014-04-17 40 views
0

我很好奇,如何模型綁定不使用剃刀但是一些客戶端框架(敲除,角等)時的處理。MVC而不助手結合

例如模型綁定需要像[0].Collection[0].Property一個名字,這剃刀將與嵌套集合的複雜對象自動生成。

怎樣一個槓桿客戶端技術,它允許一個動態更新模式,且仍滿足這些要求?有沒有一種簡單的方法,或者必須一個手動創建/重新創建索引等

+0

你必須自己製作的標記 - 但大多數客戶端框架會給你各種模板工具,幫助簡化流程。 –

+0

有客戶端MVV工具像knockoutjs,這將幫助你實現這個 –

+0

謝謝。對於我問到的框架有什麼好的參考?也許我只是不知道我在尋找什麼,但我還沒有找到任何關於這個問題的內容。我想了解它是如何工作的 – aw04

回答

1

當客戶端框架,以處理代表你的模型,你再也不用擔心手工爲您的藏品都表示爲JavaScript數組創建索引。

一個例子使用knockoutjs:

敲除視圖模型

var OrdersModel = function (Order) { 
    var self = this; 

    self.OrderNumber = ko.observable(Order ? Order.OrderNumber : 0); 
} 

var ViewModel = function() { 
    var self = this; 

    self.Orders = ko.observableArray([]); 

    self.AddOrder = function (Order) { 
     self.Orders.push(Order); 
    } 

    self.RemoveOrder = function (Order) { 
     self.Orders.remove(Order); 
    } 

    self.LoadOrders = function() { 
     // AJAX to load orders from DB 
    } 

    self.LoadOrders(); 
} 

HTML

<section id="orders" data-bind="foreach: Orders"> 
    <input type="text" data-bind="attr: { 
             name: 'Orders[' + $index() + '].OrderNumber 
            }" /> 
</section> 

C#模型

public class OrderModel { 
    public int OrderNumber { get; set; } 
} 

C#視圖模型

public class OrdersViewModel { 
    public List<OrderModel> Orders { get; set; } 

    public OrdersViewModel() { 
     this.Orders = new List<OrderModel>(); 
    } 
} 

這是一個非常簡單的例子,但淘汰賽JS將建立像輸入:當您發佈這些到控制器,模型綁定

<input type="text" name="Orders[0].OrderNumber" /> 
<input type="text" name="Orders[1].OrderNumber" /> 

所以將適當地工作,並建立一個訂單清單與適當的OrderNumber。

現在,我們的訂單存儲在observableArray中,如果我們調用AddOrder或RemoveOrder,所有索引都將通過knockout js自動更新,因此保留了我們的模型綁定器的索引,而不需要額外的操作來使其工作。