1

モデル層として Entity Framework を使用する MVC3 アプリケーションがあります。

EmployeeController には、次のものがあります。

public ActionResult GetEmployeeEdit(String id)
{
    // Get the desired Employee
    var model = GetEmployees().FirstOrDefault(o=>o.EFolderid == id);
    return View("EmployeeEdit", model);
}

private IQueryable<Employee> GetEmployees()
{
    // Returns IQueryable<Employee>
    return _employeeService.GetTable();
}

EmployeeEdit には次のものがあります。

@model Metastorm.Domain.Models.Employee

@{
    ViewBag.Title = "Employee Edit";
 }

@using (Html.BeginForm("SaveEmployee", "Employee", FormMethod.Get, Model))
{
    <fieldset>
        <legend>Edit Employee</legend>
        <br />
        @Html.Label("firstName", "First Name: ")
        @Html.EditorFor(o => @Model.NameFirst) 

        <br />
        @Html.Label("lastName", "Last Name: ")
        @Html.EditorFor(o => @Model.NameLast)        
    </fieldset>

    <br />
    <input class="button" id="submit" type="submit" value = "Save Employee" />
}

EmployeeController に戻ります。

[HttpGet]
public ActionResult SaveEmployee(Employee employee)
{
    if (ModelState.IsValid)
    {
        // Get the Employee Model again from Entity, Update and save
        // Unfortunately, the employee object's FolderId value is null
    }

    // Just getting a model to satisfy the function
    var model = GetEmployees().FirstOrDefault();
    return View("EmployeeEdit", model);
}

私が抱えている問題は、Employee.NameFirst と Employee.NameLast を除いて、employee オブジェクトのすべてのプロパティが null であることです。これらはたまたま Html.EditorFor を使用してビューで公開されたプロパティです。

要約すると、完全にハイドレートされた Employee モデル オブジェクトを取得します。このモデルをコントローラーからビューに渡します。ビューでは、選択したフィールドを更新できます。次に、Employee モデルが Controller に戻され、そこで更新が永続化されます。

私の質問は、もともと Controller から View に渡された Employee モデルをそのまま維持するにはどうすればよいかということです。つまり、モデルが欲しい

4

3 に答える 3

1

このコードを使用してみてください:

[HttpGet]
public ActionResult SaveEmployee([Bind(Include = "NameFirst,NameLast,EFolderid")] Employee employee)
{
    if (ModelState.IsValid)
    {
        // Do your staff
        // The employee object's FolderId value will be not null
    }

    // Just getting a model to satisfy the function
    var model = GetEmployees().FirstOrDefault();
    return View("EmployeeEdit", model);
}

これにより、オブジェクト従業員のデータ メンバー「NameFirst、NameLast、EFolderid」が永続化されます。Http リクエスト中に保持するすべてのメンバーを include ステートメントで宣言する必要があります。

また、このコードをフォーム内のビューに追加する必要があります。そうしないと、EFolderid データが失われます。

@Html.HiddenFor(o=> @Model.EFolderid)

保持するメンバーごとに「HiddenFor」宣言を追加します。

于 2015-04-21T17:58:39.193 に答える
0

私は別の道を行きました。ビュー モデルを作成し、AutoMapper を使用して Employee オブジェクトのプロパティをビュー モデルにマップします。ビュー モデルをビューに渡し、変更を加えてから、ビュー モデルをアクションに戻します。次に、AutoMapper を使用してビュー モデルを Employee オブジェクトの新しいインスタンスにマップし直し、変更を永続化します。

于 2015-04-24T16:31:58.603 に答える
0

Post アクションでモデル プロパティを取得するには、フォーム内にすべてのプロパティを含める必要があります。モデルのシリアル化を正しく行うために必要です。

于 2012-12-12T15:51:57.067 に答える