2

ビューを使用してデータを保存しようとするたびに問題が発生します。私は常にnullデータを取得します。助けてください。コントローラー、モデル、ビューのコードは次のとおりです。ありがとう。

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()、 type のパラメーターを期待する必要があると思います。OverallDataUserActivityActionPerformednull

于 2013-06-12T11:58:27.200 に答える
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; }

}
于 2013-06-12T12:00:29.597 に答える