Mon modèle comme ci-dessous:MVC post Razor liste mise à jour
public class Product
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
Controller Index comme ci-dessous:
public ActionResult Index(int id)
{
return View(GetProducts()); //Get Product return List
}
contrôleur post Mon comme ci-dessous: Il est de retour liste complète affichait. Je n'ai besoin que de dossiers mis à jour.
public ActionResult Update(List<Prouct> Proucts)
{
}
Voir comme ci-dessous:
@model List<Product>
@using (Html.BeginForm("Update", "Product", FormMethod.Post, new {Proucts=Model})) {
for (var i = 0; i < Model.count(); i++)
{
@Html.HiddenFor(v => Model[i].Id)
@Html.TextBoxFor(m => Model[i].Name)
</div>
<button type="submit" title="Save">
}
SO lors de la publication de retour afficherons liste complète (y compris la mise à jour). par exemple. s'il y a 100 produits, il en affiche 100. Même si j'ai changé 1 ou aucun. Je dois donc tout mettre à jour à nouveau.
Est-il possible de publier uniquement les enregistrements modifiés?
Le formulaire va afficher tout ce qui est dans le formulaire. Vous pouvez dans votre logique côté serveur vérifier si les valeurs d'enregistrement affichées sont différentes des valeurs d'enregistrement stockées et ne les mettre à jour que si elles le sont. Mais cela peut être une opération tout aussi coûteuse, voire plus, que de simplement autoriser la mise à jour. Inversement, vous pouvez écrire beaucoup de JavaScript complexe pour suivre l'état et créer un post AJAX basé sur des enregistrements modifiés ou quelque chose comme ça. Le sacrifice là est la complexité du code. Est-ce que c'est vraiment un problème que les enregistrements soient mis à jour avec les mêmes valeurs? – David
J'avais le même problème dans l'un des projets mais heureusement, j'utilisais knockout qui a une collection observable pour identifier les changements dans la collection. –