あなたの質問を正しく理解しているかどうかはよくわかりません。EditorFor
ビューモデルからフィールドを直接追加するだけです。それは私にもっとコントロールを与えます。class A
私が収集できることから、編集しclass B
てドロップダウンリストに入れたいと思われますか?
これが私が定義class A
しclass B
、あなたのプロパティの名前を与える方法です。間違っていたらすみません。class A is class User
とclass B is class Organization
。人々が読みやすいように、プロパティをより適切に説明する必要があります。
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int OrganizationId { get; set; }
}
public class Organization
{
public int OrganizationId { get; set; }
public string OrganizationName { get; set; }
public string OrganizationDescription { get; set; }
}
ビューでデータを表現するには、ビュー モデルが必要です。
public class EditUserViewModel
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int OrganizationId { get; set; }
public IEnumerable<Organization> Organizations { get; set; }
}
public ActionResult Edit(int id)
{
// Get the user by id
User user = userRepository.GetById(id);
// You can use a mapping tool here to map from domain model to view model.
// I did it differently for the sake of simplicity
EditAViewModel viewModel = new EditAViewModel
{
UserId = user.UserId,
FirstName = user.FirstName,
LastName = user.LastName,
OrganizationId = user.OrganizationId,
Organizations = organizationRepository.GetAll()
};
// Return the populated view model to the view
return View(viewModel);
}
[HttpPost]
public ActionResult Edit(EditAViewModel viewModel)
{
if (!ModelState.IsValid)
{
viewModel.Organizations = organizationRepository.GetAll();
return View(viewModel);
}
// If validation succeeds do what ever you have to do here, like edit in database
}
そして、これがあなたのビューがどのように見えるかです。
@model YourProject.ViewModels.Users.EditUserViewModel
@using (Html.BeginForm())
{
<table>
<tr>
<td class="edit-label">First Name:</td>
<td>
@Html.TextBoxFor(x => x.FirstName)
@Html.ValidationMessageFor(x => x.FirstName)
</td>
</tr>
<tr>
<td class="edit-label">Last Name:</td>
<td>
@Html.TextBoxFor(x => x.LastName)
@Html.ValidationMessageFor(x => x.LastName)
</td>
</tr>
<tr>
<td class="edit-label">Organization:</td>
<td>
@Html.DropDownListFor(
x => x.OrganizationId,
new SelectList(Model.Organizations, "OrganizationId", "OrganizationName", Model.OrganizationId),
"-- Select --"
)
@Html.ValidationMessageFor(x => x.OrganizationId)
</td>
</tr>
</table>
<button id="SaveButton" type="submit">Save</button>
}
これが私のやり方です。シナリオに合わせてコードを変更できます。
これが役立つことを願っています。