2

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

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

4 回答 4

1

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

[HttpPost]
public string EditUserActivity(OverallData overallData )
{
    string postedValue = overallData.userActivity.ActionPerformed;
}
于 2013-06-12T11:58:48.597 回答
1

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

于 2013-06-12T11:58:27.200 回答
0

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

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

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

这将使用 name 生成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; }

}
于 2013-06-12T12:00:29.597 回答
0

试试看嘛

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

   }
于 2013-06-12T12:01:33.480 回答