【问题标题】:ASP.NET MVC4 View Model Parameter Null when Posted发布时 ASP.NET MVC4 查看模型参数 Null
【发布时间】:2014-04-19 17:36:38
【问题描述】:

我想使用视图模型作为编辑表单的输入。叫它——

public class StudentEditViewModel
{
}

我的 Edit 操作方法创建对象并将其传递给 Edit 视图,该视图将 @model 设置为 StudentEditViewModel。这工作正常 - 所有数据都按预期显示。

但是,当我发布更改(使用)时,事情就崩溃了。这是我的动作处理程序的骨架:

[HttpPost]
public ActionResult Edit(StudentEditViewModel student)
{
}

问题是“学生”为空。所有在线示例似乎都是这样做的,但我显然遗漏了一些东西。谁能帮帮我?

如有必要,我很乐意提供更多详细信息。提前致谢。

【问题讨论】:

  • 能否请包含调用Edit 操作的视图。
  • 你的 ViewModel 有复杂的项目吗?因为如果是这种情况,你需要添加构造器代码来初始化那些复杂的属性。
  • 没有查看代码,无法判断问题所在。

标签: asp.net-mvc-4


【解决方案1】:

您的StudentEditViewModel 需要属性(例如public string name { get; set;}),因为StudentEditViewModel 应该有一个属性基础才能使其具有值,并且在您看来,使用基本的 LINQ 语法

using(Html.BeginForm())
{
    @html.TextBoxFor(u => u.name)
    <input type="submit"/>
}

尝试添加非数据注释 ActionResult 并检查断点。这是我之前尝试编程时的错误。希望能帮到你。

【讨论】:

    【解决方案2】:

    您是否使用显式类型的视图模型?在这种情况下,您可以通过 jquery 进行如下操作:

    $("#btnSave").click(function (event) {
            event.preventDefault();
    
            if ($("#form1").valid()) {
    
                var formInput = $('#form1').serializeObject();
    
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    url: 'your controller action url be here',
                    data: JSON.stringify(formInput)
                })
                .done(function (data, textStatus, jqXHR) {
    
                    showMsg('page-message', 'success', 'Success!', 'The item was saved.');
                    $('#PriorityDateId').val(data);
                    window.location.href = 'after save where you want to redirect(give url)';
                    })
              .fail(function (jqXHR, textStatus, errorThrown) {
    
                  showResponse('page-message', 'error', 'Error!', jqXHR.responseText);
              });
                }
        });
    

    如果需要更多信息,请告诉我..

    【讨论】:

      【解决方案3】:

      您的模型应该包含一些属性,如下所示:

      型号:

      public class StudentEditViewModel
      {
      //Sample Properties
      public string Name{get;set;}
      public int Age {get;set;}
      }
      

      你的视图应该是这样的。

      @model Nameofyourproject.Model.StudentEditViewModel
      
      @using(Html.BeginForm())
      {
      @Html.LabelFor(m => m.Name)    
      @Html.TextBoxFor(m => m.Name) // this where you will enter a value for the Name property
      
      @Html.LabelFor(m => m.Age)    
      @Html.TextBoxFor(m => m.Age) // this where you will enter a value for the Age property
          <input type="submit"/> //this will submit the values to your action method.
      }
      

      您现在可以在您的操作方法中获取此值

      [HttpPost]
      public ActionResult Edit(StudentEditViewModel student)
      {
      var name = student.Name;
      var age = student.Age;
      
      }
      

      【讨论】:

      • 谢谢!我想我现在明白了。感谢您的帮助。
      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多