3

MVC アプリケーションでは、タスクを表示するビューがあります。タスクは、割り当てられた従業員によってフィルター処理する必要があります。従業員はドロップダウンリストに表示されます。

@using (Html.BeginForm("EmployeeDropUsed", "Task", new { id = ?? }))
{
    @Html.DropDownList(
        "EmployeeDrop", new SelectList(Model.Employees, "Id", "EmployeeName"), "Select employee",
        new
        {
            onchange = @"
            var form = document.forms[0]; 
            form.submit();"
        })
}

フォームからデータを取得する ActionResult を持つ TaskController があります。

[HttpPost]
public ActionResult EmployeeDropUsed(int id)
{
    Employee e = er.GetById(id);
    return LoadControls(er.GetAll(), e.Tasks.ToList());
}

ビューモデルはこんな感じ

public class TaskModel
{
    public TaskModel(List<Employee> employees, List<Task> tasks)
    {
        Employees = employees;
        Tasks = tasks;
    }

    public List<Task> Tasks { get; set; }
    public List<Employee> Employees { get; set; }
}

問題は、選択した値をドロップからコントローラーに戻す方法がわからないことです。モデルで DropDownListFor と EmployeeId プロパティを使用してみました:

@Html.DropDownListFor(m => Model.EmployeeId, Model.Employees, "Select Employee")

public int EmployeeId { get; set; }

その結果、id は常に 0 になります。

4

2 に答える 2

5

しかし、そのラムダ式は正しくありませんか? そうじゃないかな

@Html.DropDownListFor(m => m.EmployeeId ....

それ以外の

@Html.DropDownListFor(m => Model.EmployeeId
于 2012-04-18T14:18:08.153 に答える
2

問題は、EmployeeDropUsedアクションが という名前のパラメータを探しておりid、送信しているパラメータが であることですEmployeeIdEmployeeDropUsedアクションのパラメーター名を にemployeeId変更するか、EmployeeIdプロパティを にTaskModel変更しますid

TaskModelプロパティを変更すると、これが機能するはずです:

@Html.DropDownListFor(m => m.id, Model.Employees, "Select Employee")

EmployeeDropUsedパラメータを変更すると、これが機能するはずです:

@Html.DropDownListFor(m => m.EmployeeId, Model.Employees, "Select Employee")
于 2012-04-18T13:50:17.803 に答える