Toute aide pour comprendre pourquoi mon champ n'est pas mis à jour en Mvc et comment résoudre ce problème?Pourquoi mon champ n'est pas mis à jour en Mvc avec EditorFor?
Ceci est mon contrôleur:
public class RestaurantController : Controller
{
static List<RestaurantModel> rr = new List<RestaurantModel>()
{
new RestaurantModel() { Id = 1, Name = "Kebabs", Location = "TX" },
new RestaurantModel() { Id = 2, Name = "Flying Donoughts", Location = "NY" }
};
public ActionResult Index()
{
var model = from r in rr
orderby r.Name
select r;
return View(model);
}
public ActionResult Edit(int id)
{
var rev = rr.Single(r => r.Id == id);
return View(rev);
}
}
Puis, quand j'accéder à/restaurant/index, je ne peux évidemment voir une liste de tous les restaurants parce que je Index.cshtml:
@model IEnumerable<DCForum.Models.RestaurantModel>
@foreach (var i in Model)
{
@Html.DisplayFor(myitem => i.Name)
@Html.DisplayFor(myitem => i.Location)
@Html.ActionLink("Edit", "Edit", new { id = i.Id })
}
et quand je clique sur le lien Modifier, ce point de vue est déclenchée (Edit.cshtml):
@model DCForum.Models.RestaurantModel
@using(Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
@Html.HiddenFor(x => x.Id)
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
<input type="submit" value="Save" />
</fieldset>
}
Je cliquant sur le s ave mais la valeur que j'entre pour Name n'est pas enregistrée quand je retourne à l'index. Qu'est-ce que j'oublie ici? C'est assez évident qu'il me manque quelque chose. Comment puis-je faire la mise à jour?
PS. Serait-il plus recommandable de le faire d'une manière plus directe, peut-être sans utiliser les aides et juste associer une méthode de mise à jour avec le bouton de sauvegarde? (parle juste).
Est-ce que cliquer sur "Enregistrer" sur votre page d'édition fait quoi que ce soit? Je ne vois aucun code pour réellement mettre à jour quoi que ce soit. – Becuzz
@Becuzz N'a pas besoin de. OP a enveloppé la logique dans "BeginForm", a probablement besoin de passer dans les paramètres et/ou "Id" pour localiser le contrôleur/méthode. Je n'utilise généralement pas BeginForm ... mais plutôt deviner. - https://msdn.microsoft.com/fr-fr/library/system.web.mvc.html.formextensions.beginform(v=vs.118).aspx –
Vous n'avez pas de 'ActionMethod' pour recevoir le Données "POST". Il devrait ressembler à quelque chose comme '[HttpPost] public ActionResult Edit (restaurant RestaurantModel)' –