2013-06-12 32 views
2

问题是每当我尝试使用视图保存数据时。我总是得到空数据。请帮忙。我的控制器,模型和视图的代码如下。谢谢。发布的数据在asp.net中只包含空值mvc 4

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

好家伙大家都建议我尝试下面的代码,但仍没有运气。 [HttpPost] public string EditUserActivity(OverallData overallData) { string postedValue = overallData.userActivity.ActionPerformed; } – Redone

+0

你有没有尝试使'OverallData.userActivity'属性而不是字段? – CalC

+0

更新了我的答案 - 当我创建一个新项目并复制代码时,它正在工作。 – CorrugatedAir

回答

1

我觉得你的控制器的方法EditUserActivity()应根据在视图中使用的模型预计OverallData类型的参数,而不是UserActivity这可能解释为什么ActionPerformednull

1

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

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

做了同样的事情,但是sitll没有运气。 – Redone

+0

@ user1957354:用这种方法,整个对象是null还是只是一些字段? –

+0

整个对象为空。 – Redone

0

模型活页夹被设置为使用OverallData。

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

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

这将名为userActivity.ActionPerformed产生,因此模型的结合,而不是仅仅以ActionPerformed将期待它分配给userActivity.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; } 

} 
0

只是尝试

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

    }