发布时,ASP.NET MVC4视图模型参数为空

时间:2014-04-18 22:39:58

标签: asp.net-mvc-4

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

public class StudentEditViewModel
{
}

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

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

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

问题在于"学生"一片空白。所有在线示例似乎都是这样做的,但我显然遗漏了一些东西。任何人都可以帮助我吗?

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

3 个答案:

答案 0 :(得分:2)

您的StudentEditViewModel需要属性(例如public string name { get; set;}),因为StudentEditViewModel应具有属性基础以使其具有值,并且在您的视图中,使用基本的LINQ语法

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

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

答案 1 :(得分:1)

您使用的是明确键入的视图模型吗?在这种情况下,您可以通过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);
          });
            }
    });

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

答案 2 :(得分:1)

您的模型应包含一些属性:

模型:

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;

}