Похоже, вам просто нужно обернуть DropDownListFor
в <form>
URL-адресом, указывающим на действие, которое позволит вам редактировать. Форма может использовать запрос GET
, если это идемпотентная операция, и вы можете использовать JavaScript для отправки формы при изменении значения <select>
, возвращаясь к отображению кнопки для отправки, когда JavaScript отключен.
Как правило, я структурирую контроллеры MVC и выполняю действия как таковые
public class ProfilesController : Controller
{
public IProfileRepository Profiles { get; private set; }
public ProfilesController(IProfilesRepository profiles)
{
Profiles = profiles;
}
[HttpGet]
public ActionResult Index()
{
var profiles = Profiles.All();
return View(new ProfilesModel { Profiles = profiles });
}
[HttpGet]
public ActionResult Edit(int id)
{
var profile = Profiles.GetById(id);
return View(new ProfileModel { Profile = profile });
}
[HttpPost]
public ActionResult Edit(ProfileModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var profile = Profiles.GetById(id);
// update the profile
Mapper.Map(model, profile);
if (Profiles.Update(profile))
{
TempData["message"] = "Profile updated successfully";
}
return RedirectToAction("Edit");
}
}
Index
отобразит все профили. На каждом профиле будет отображаться <a>
с URL-адресом, указывающим на Edit, а URL-адрес будет включать id
для профиля для редактирования. Edit
просмотр опубликует форму на Edit
, а профиль будет обновлен с изменениями модели.
Я рекомендую взглянуть на что-то вроде NerdDinner или Музыкальный магазин MVC , чтобы понять, как они структурируют свой код.