2010-10-04 3 views
0

Я хочу знать работу метода UpdateModel(). Я просто знаю, что это обновление текущих данных модели. но как это работает? Поскольку, хотя я использую метод UpdateModel() в контроллере редактирования, есть функция загрузки файлов. Я сохраняю путь загруженного файла в своем db. но после выполнения значение метода UpdateModel пути заменяется на «System.Web.HttpPostedFileWrapper». почему это должно случится: Код:Как метод UpdateModel работает в 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

Почему вы не захватить источник MVC и отладки для себя? Или, если вас это не беспокоит, вы можете посмотреть здесь: http://aspnet.codeplex.com/sourcecontrol/changeset/view/23011?projectName=aspnet#266451 – RPM1984

+0

извините, я пробовал это, но как UpdateModel() не выполняется (Показывает) выполнение внутреннего метода. Я хочу это увидеть. хотите понять, как это работает. –

+0

Это потому, что 'UpdateModel', в конце концов, использует интерфейс, а не конкретный класс - попробуйте посмотреть класс' DefaultModelBinder.cs'. – Buildstarted

ответ

1

Почему вы возитесь с этим методом. Использование вида модели передается в качестве аргумента действия так гораздо проще:

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

И в методе действия:

[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"); 
} 
Смежные вопросы