2013-06-12 35 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; 

    }