2013-12-11 34 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); 
} 
相关问题