发布的数据仅包含asp.net mvc 4中的空值

时间:2013-06-12 11:55:09

标签: asp.net asp.net-mvc-3

问题是每当我尝试使用视图保存数据时。我总是得到空数据。请帮忙。我的控制器,模型和视图代码如下。感谢。

public class OverallData
{
    public List<UserInfo> userInfo = new List<UserInfo>();
    public UserActivity userActivity = new UserActivity ();
}

public class UserInfo
{
    public int UserID { get; set; }
    public action UserName { get; set; }
    public action UserPassword { get; set; }

}

public class UserActivity
{
     public int ActivityID{ get; set; }
     public string ActionPerformed { get; set; }
}

查看

@model BusinessProcess.Models.OverallData
<h1>List of Usernames</h1>
@foreach (var item in Model.userInfo) 
{
    @Html.DisplayFor(modelItem => item.UserName)
}


<h1>Enter some action Performed</h1>
@using (Html.BeginForm("EditUserActivity", "ManageUser", FormMethod.Post, new { id = "EditUserActivity" }))
{
@Html.ValidationSummary()

    @Html.DisplayNameFor(model => model.userActivity.ActionPerformed)
    @Html.EditorFor(model => model.userActivity.ActionPerformed)

    <button type="submit">Save</button>
}

控制器

[HttpPost]
public string EditUserActivity(UserActivity tempUserActivity)
{
    string postedValue = tempUserActivity.ActionPerformed;
    //When i debug this the "postedValue" is null
}

4 个答案:

答案 0 :(得分:1)

我认为您的控制器方法EditUserActivity()应该期望基于视图中使用的模型OverallData而不是UserActivity的参数,这可以解释为什么ActionPerformednull

答案 1 :(得分:1)

您的模型属于BusinessProcess.Models.OverallData类型,因此您的操作期望该类型。我会说你应该将你的行动方法改为

[HttpPost]
public string EditUserActivity(OverallData overallData )
{
    string postedValue = overallData.userActivity.ActionPerformed;
}

答案 2 :(得分:0)

模型绑定器设置为使用OverallData。

这是因为视图中输入元素的名称。模型绑定器使用表单元素的名称将它们绑定到您传递给控制器​​的类。

@Html.EditorFor(model => model.userActivity.ActionPerformed)

这将使用名称userActivity.ActionPerformed生成,因此模型绑定会将其分配给userActivity.ActionPerformed,而不仅仅是ActionPerformed。由于OverallData没有userActivity.ActionPerformed,因此该值不会被分配给任何内容。

如果您只是将OverallData作为参数传递,它就会起作用。

修改

将您的视图模型更改为:

public class OverallData
{
    public OverallData()
    {
        userActivity = new UserActivity();
        userInfo = new List<UserInfo>();
    }
    public List<UserInfo> userInfo { get; set; }
    public UserActivity userActivity { get; set; }

}

答案 3 :(得分:0)

试试

  [HttpPost]
  public string EditUserActivity(OverallData tempUserActivity)
   {
     string postedValue = tempUserActivity.userActivity.ActionPerformed;

   }