Vous essayez de faire en sorte que UpdateModel fonctionne pour mon utilisateur. La classe User possède des propriétés de chaîne de base comme CompanyName, FirstName, LastName, etc, donc rien d'exotique.ASP.Net MVC Controller UpdateModel non mis à jour
Voici l'en-tête pour moi:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Public.Master" Inherits="System.Web.Mvc.ViewPage<User>" %>
Après qu'ils soumettent, dans mon contrôleur, le code ressemble à ceci:
[HttpPost]
public ActionResult Edit(string id, FormCollection collection)
{
try
{
User myUser = db.Get<IUserRepository>().Get(id);
UpdateModel(myUser);
db.Update(myUser);
return RedirectToAction("Index", "Home");
}
catch
{
return View();
}
}
Les valeurs passées dans FormCollection ont les valeurs telles que:
[0] "FirstName" string
[1] "LastName" string
[2] "Email" string
Voici mon UserModelBinder (sorti un certain code de vérification d'erreur) qui semble être t il source du problème:
public class UserModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
IPrincipal p = controllerContext.HttpContext.User;
User u = db.Get(p.Identity.Name);
return u;
}
}
tandis que le myUser que je reçois de la base de données a toutes ses valeurs d'origine, le UpdateModel pour mon contrôleur ne fait jamais en fait aucun changement. J'ai lu des problèmes avec les ViewModels et le préfixe à utiliser, mais je ne fais que passer dans l'objet de base de données habituel. La chose étrange est que cette modification de l'utilisateur est pour ma zone "publique" et j'ai déjà une modification de l'utilisateur pour la zone d'administration qui permet à l'administrateur de modifier les propriétés supplémentaires. La zone "Admin" La fonction de modification de l'utilisateur fonctionne correctement, mais la zone "Public" pour la modification de l'utilisateur ne fonctionne pas, même si le code est presque identique.
Mise à jour:
Cela est avéré être un problème de ModelBinding personnalisé et en changeant mon UserModelBinding tirer de DefaultModelBinder et d'ajouter dans ma méthode de bindModel:
if (bindingContext.Model != null)
return base.BindModel(controllerContext, bindingContext);
Tout semble fonctionner.
Eh bien, l'identifiant de chaîne provient de l'URL de l'édition: – enantiomer2000
J'avais précédemment configuré ModelBinding for User. Cela pourrait-il affecter la façon dont l'utilisateur est transmis et comment UpdateModel l'affecterait? J'ai remarqué que l'utilisateur étant passé est certainement celui de la base de données (à partir du ModelBinder que j'ai créé). – enantiomer2000
Griegs, votre méthode semble fonctionner, mais seulement si je supprime la classe personnalisée UserModelBinder de la liste ModelBinders dans le global.asax. J'ai un peu aimé pouvoir faire passer mon instance User automatiquement, plutôt qu'un IPrincipal. Quelqu'un at-il des idées sur la façon de faire ce travail avec ma façon originale? – enantiomer2000