【问题标题】:Calling viewmodel methods from partial view ASP.NET MVC C#从部分视图 ASP.NET MVC C# 调用视图模型方法
【发布时间】:2014-12-11 12:17:21
【问题描述】:

如果我有这种方式的视图模型:

public class ChangePasswordVM : IChangePasswordVM
{
    public bool IsValidPassword(string password)
    {
        return password.Length >= 7;
    }

    public void SetPassword(string password)
    {
        // set password
    }
}

那么是否可以从局部视图调用 IsValidPassword 和 SetPassword 方法?

@model ViewModels.IChangePasswordVM

假设我有一个 @Html.BeginForm 并在提交时检查它是否是有效密码,如果是我调用 SetPassword 方法。

【问题讨论】:

  • 不知道你的意思——你为什么要从局部视图中调用这个业务逻辑并且在提交之前呈现?你不应该在处理提交的控制器方法中这样做吗?
  • 我习惯了更多的桌面客户端方法,在这种方法中,每个视图都有一个视图模型,您可以直接与之通信以验证您在视图中输入的数据。我想要一个控制器,它返回一个带有视图模型的视图,该视图稍后使用视图模型来操作服务器端数据。可能我这里的思维方式不对。
  • MVVM 上下文中的视图模型与 MVC 中的视图模型不同。在 MVC 中,您通过向控制器操作发出 Get/Post 请求来执行操作。您的 VM 中没有任何“操作”类型的方法。
  • 一个视图模型应该只是你想要显示的数据的集合,而不包含任何功能。使用它将数据传输到您的部分视图中,将数据发送回您的控制器,然后存储它(在验证和检查等之后)。其他一切都与 MVC 作斗争,而不是使用它。

标签: c# asp.net viewmodel


【解决方案1】:

我认为在这个例子中你只需要在你的密码属性上设置特定的属性。就这样。在您的示例中,我认为您可以在密码属性上使用以下属性:

[MinLength(7, ErrorMessage="Password must have at least 7 characters")]
public string Password {get;set;}

ViewModel 应该只是您要绑定的数据 - 而不是逻辑。因此密码应该是您的视图模型的属性。

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多