2013-12-11 35 views
0

我正在研究一個asp.net mvc應用程序。如何在asp.net中調用控制器中的模型方法mvc

這是我通過應用程序正確的方法。

這裏是我的模型:

public class EmployeeModel 

{ 

    //Properties 

    // Constructors 

    // Methods 
    } 

筆者認爲:(強烈模特屬性類型)例如:有些編輯查看

我的控制器:

[httppost] 
     public void save(Employeemodel m) // ajax call that gets updated model details 
    { 
     m.update() // making database call from controller action 
    } 

是否有任何嚴重的設計問題用我的MVC方法。可能我誤解了MVC?

是否適合在控制器操作中調用模型方法(m.update())?

模型包含操縱數據的方法嗎?這是對的嗎?

請幫助/建議正確的做法在MVC

+0

寫裏面的方法'EmployeeModel'它會叫... –

回答

1

按照一般的做法,你現在應該遵循這個方法。 雖然這是接受整個模型作爲參數的默認MVC行爲,但您應該有一個名爲DTO(數據傳輸對象)或代表UI的ViewModel的中間層。 接受並驗證View模型後,您可以將其轉換爲您的主要業務實體。 Offcouse它取決於你如何在你的更新方法中編寫代碼,但主要的破解是這種情況是....任何機構都可以將任何已知的屬性值傳遞給此方法,並可以破解你的系統。例如,假設你已經按照你的Employeemodel值 { 標識, 名稱, SecurityCode, ... }

和你的編輯畫面只是名稱輸入來更新它。任何機構都可以爲SecurityCode添加額外的html,並可以爲其添加不好的值:) 我希望我沒有把你搞糊塗。 爲了開始嘗試實施Repository模式MVC ...谷歌它,你會發現它的基本用法。 :)

乾杯

+0

@ KD..can請你爲理解尤爲明顯 –

+0

reffer此鏈接提供任何樣本例子,你就會明白如何使用存儲庫模式... –

+0

http://stackoverflow.com/questions/20512820/how-to-properly-test-controllers-in-asp-net-mvc-that-has-database-calls –

0

你的邏輯很好。但正如KD所說,你應該有代表視圖的視圖模型。我建議你在視圖模型中編寫你的方法,因爲你只能將模型實體傳遞給數據庫或其他任何地方。

public class Employee 
{ 
    //Properties 
} 

public class EmployeeViewmodel 
{ 
    // Employee model object 
    //Constructors 
    //Methods 
} 

return view("View name", EmployeeViewModel); 

因此,您可以更新模型,通過OR/M將員工單獨傳遞給數據庫。這是基本的靈活方法。你可以有一個實用程序模型類,其中包含像城市,州,性別等常見的數據檢索。因此,您不會將實體與其他模型混合使用。

1

我會建議你有單獨的層來保存數據到數據庫,因爲它不只是MVC,應該遵循。

  1. 您應該使用Model(僅限函數)作爲執行數據庫任務的提供者。
  2. ViewModel持有您的實體(僅限屬性)
  3. 控制器可以處理您的應用程序邏輯。
  4. 查看呈現HTML/UI。

所以它不是關於MVC,而是應該遵循構建應用程序的最佳實踐。

此外,我們有幾個選項,我們必須考慮在規劃應用程序的體系結構之前。

  1. 服務/業務層 - 交互的B/W應用層和庫
  2. 提供商/庫層 - 交互B/W服務層和數據庫

所以,這取決於抽象水平你想要的,但就MVC的關注,我會建議你有額外的ViewModel MVVM分離層。

最好在stachexchange聊天中詢問這些類型的問題。

視圖模型

public class User 
{ 
    public Guid Id {get;set;} 
    public string Name {get;set;} 
} 

模型

public class UserModel 
{ 
    public void AddUser(User user) 
    { 
    //add to the database 
    } 

    public void UpdateUser(User user) 
    { 
    //update in the database 
    } 
} 

控制器

[HttpPost] 
public ActionResult UpdateUser(User user) 
{ 
UserModel user = new UserModel(); 
user.UpdateUser(user); 
} 
相關問題