В идеале, я считаю, что форма должна отправляться в одно действие.
Таким образом, контроллер может выглядеть следующим образом:
public class HomeController : Controller
{
public ViewResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(ItemModel itemModel, string submit)
{
//I'm not sure why I need this but the fields display with empty results on my machine otherwise
ModelState.Clear();
if (submit == "edit")
{
this.TempData.Add("item", itemModel);
return View("ChangeImage", new ImageModel { ImageName = itemModel.ImageName });
}
else
{
//perform save here
return RedirectToAction("ViewAfterSavePerformed");
}
}
[HttpPost]
public ViewResult Image(ImageModel imageModel)
{
ItemModel itemModel = (ItemModel)this.TempData["item"];
itemModel.ImageName = imageModel.ImageName;
return View("Index", itemModel);
}
}
При следующих моделях представления:
public class ItemModel
{
public string Description { get; set; }
public string ImageName { get; set; }
}
public class ImageModel
{
public string ImageName { get; set; }
}
И следующие виды:
Индекс:
<h2>Index</h2>
@using (Html.BeginForm())
{
<p>Description: @Html.EditorFor(m => m.Description)</p>
<p>Image: @Html.EditorFor(m => m.ImageName)</p>
<input type="submit" name="submit" value="edit" />
<input type="submit" name="submit" value="save" />
}
Изменить изображение:
<h2>ChangeImage</h2>
@using (Html.BeginForm("Image", "Home"))
{
<p>Image: @Html.EditorFor(m => m.ImageName)</p>
<input type="submit" name="submit" value="save image" />
}
Надеюсь, это должно ощущаться, хотя я использовал синтаксис бритвы.