【问题标题】:Trouble using model properties of ViewModel in my controller在我的控制器中使用 ViewModel 的模型属性时遇到问题
【发布时间】:2015-10-02 04:01:58
【问题描述】:

我创建了一个 ViewModel,其中包含我的两个模型作为属性:

public class ViewModel 
{
    public Login loginVM;
    public Person personVM;        
}

Login 和 Person 对象的属性由用户输入填充到视图中,但是当我将 ViewModel 发送回我的控制器并尝试使用 Person/Login 属性时,它说它们返回为 null:

[HttpPost]
public ActionResult AddPerson(ViewModel vm) 
{    
    DataBase da = new DataBase();
    da.addLogin(vm.loginVM);
    da.AddPerson(vm.personVM);    
}

由于某种原因,vm.loginVM 和 vm.personVM 都为空。

我发现一篇博文似乎有人遇到过这个问题:https://garfbradazweb.wordpress.com/2012/03/08/mvc3-viewmodel-binding-to-controllerpost-methods/

但它似乎真的一点帮助都没有

【问题讨论】:

  • 在 GET 的情况下,您是否尝试过 ActionResult AddPerson([FromUrl] ViewModel vm),如果是 POST:ActionResult AddPerson([FromBody] ViewModel vm)
  • 我认为[HttpPost]应该在方法而不是VM之上!
  • 能否添加您的 (CS)HTML 代码,以便我们查看是否有错误的绑定?
  • @annemartijn 我有点害怕发布所有代码,因为这是一个工作项目,但我通过执行类似@Html.LabelFor(model => model.personVM.first_name, "First Name:") 或 @Html.TextBoxFor(model => model.loginVM.login_name, new { maxlength = "20" }) 用于模型的所有属性
  • 我发现了问题所在。在控制器方法中,我必须使用( [Bind(Prefix = "personVM")] Person personModel, [Bind(Prefix = "loginVM")] Login loginModel )作为参数,就像我在开篇文章中发布的文章一样。但是,在我使用 Bind(Prefix="Person") 和 Bind(Prefix="Login") 而不是 personVM 和 loginVM @annemartijn

标签: c# asp.net-mvc model-view-controller


【解决方案1】:

您的 ajax 调用应如下所示:

var model = {loginVM:{YOUR OBJECT}, personVM:{YOUR OBJECT}};
$.post(url,{vm:model});

【讨论】:

    【解决方案2】:

    我发现了问题所在。在控制器方法中,我必须使用( [Bind(Prefix = "personVM")] Person personModel, [Bind(Prefix = "loginVM")] Login loginModel )作为参数,就像我在开篇文章中发布的文章一样。但是,在我放置 Bind(Prefix="Person") 和 Bind(Prefix="Login") 而不是 personVM 和 loginVM 之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2020-02-18
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多