问题是每当我尝试使用视图保存数据时。我总是得到空数据。请帮忙。我的控制器,模型和视图代码如下。感谢。
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
}
答案 0 :(得分:1)
我认为您的控制器方法EditUserActivity()
应该期望基于视图中使用的模型OverallData
而不是UserActivity
的参数,这可以解释为什么ActionPerformed
是null
。
答案 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;
}