2010-10-04 4 views
0

Je veux connaître le fonctionnement de la méthode UpdateModel(). Je sais juste que c'est pour mettre à jour les données du modèle actuel. mais comment ça fonctionne exactement? Parce que pendant que j'utilise le UpdateModel() dans la méthode de contrôleur d'édition, il existe des fonctionnalités de téléchargement de fichiers. Je garde le chemin du fichier téléchargé dans mon DB. mais après l'exécution, la valeur de la méthode UpdateModel du chemin est remplacée par "System.Web.HttpPostedFileWrapper". pourquoi cela se produit: code:Comment la méthode UpdateModel fonctionne dans asp.net mvc 2

if (!String.IsNullOrEmpty(Request.Files["TDSCertificatePath"].FileName)) 
       { 
        TrustTrusteeMapping objTrustTrusteeMapping = trust_trustee_mapping_management.GetTrustTrusteeMappingById(objTDSDetail.TrustTrusteeMappingId); 
        string TrustTrusteeMappingName = objTrustTrusteeMapping.Trust.TrustName + "_" + objTrustTrusteeMapping.TrusteeMaster.FullName; 
        HttpPostedFileBase fileToUpload = Request.Files["TDSCertificatePath"]; 
        objTDSDetail.TDSCertificatePath = CommonFunctions.UploadFile("TDSCertificatePath", "Content\\TDSCertificate\\", TrustTrusteeMappingName, fileToUpload); 
        fileToUpload = null; 
        objTrustTrusteeMapping = null; 
       } 

       UpdateModel(objTDSDetail);//After executes this the value of objTDSDetail.TDSCertificatePath changes as I said before. 
+0

Pourquoi ne vous prenez pas la source MVC, et le débogage pour vous-même? Ou si vous ne pouvez pas être dérangé, vous pouvez le regarder ici: http://aspnet.codeplex.com/sourcecontrol/changeset/view/23011?projectName=aspnet#266451 – RPM1984

+0

excusez-moi! J'ai essayé, mais comment UpdateModel() works ne va pas (Montrer) l'exécution de la méthode interne. Je veux que ça se voit. Je veux comprendre la façon dont cela fonctionne. –

+0

C'est parce que 'UpdateModel', à la fin, utilise une interface et non une classe concrète - essayez de regarder la classe' DefaultModelBinder.cs'. – Buildstarted

Répondre

1

Pourquoi vous embêter avec cette méthode. En utilisant un modèle de vue passé comme argument d'action est beaucoup plus facile:

public class MyViewModel 
{ 
    public int TrustTrusteeMappingId { get; set; } 
    public HttpPostedFileBase TDSCertificatePath { get; set; } 
} 

Et dans votre méthode d'action:

[HttpPost] 
public ActionResult Index(MyViewModel model) 
{ 
    // use the model here whose properties are bound from the POST request 
    if (model.TDSCertificatePath.ContentLength > 0) 
    { 
     // a TDSCertificatePath was provided => handle it here 
    } 
    return RedirectToAction("success"); 
} 
Questions connexes