ASP.NET MVC2 + загрузка файлов (класс HttpPostedFileBase) - PullRequest
0 голосов
/ 08 июня 2011

У меня проблема с загрузкой моего файла. Я хочу загрузить его из моего вида редактирования:

    <% 
    using (Html.BeginForm("edit","profile",FormMethod.Post, new { enctype="multipart/form-data" }))
    {%>
    <%: Html.ValidationSummary(true) %>

    <%: ViewData["ErrorMessage"] %>
    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Image) %>
        </div>
        <div class="editor-field">
            <input type="file" id="Image" name="Image" />
            <label id="LabelErrorImage" class="errorMessage" />
        </div> 

        <p>
            <input type="submit" value="Save" onclick="return Validate(); return false;"/>
        </p>
    </fieldset>

<% } %>

Я хочу использовать HttpPostedFileBase класс. Мое действие по редактированию:

[Authorize]
        [HttpPost]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(string id, HttpPostedFileBase file, FormCollection formValues)
        {
                    if (ModelState.IsValid)
                    {

                        if (file != null && file.ContentLength > 0)
                        {
                            CustomHelpers.createFolder();
                            var tmpPath = MyConfig.UPLOAD_FILE_PATH + "/" + Membership.GetUser().ProviderUserKey.ToString();
                            var path = Path.Combine(Server.MapPath(MyConfig.UPLOAD_FILE_PATH), "Avatar");
                            var fileExtension = Path.GetExtension(file.FileName);
                            file.SaveAs(path);
                            user.Image = "Avatar";
                        }
                        adventureDB.SaveChanges();

                        return RedirectToAction("Index");
                    }
        }

Но у меня всегда есть пустой объект файла, почему ????? У вас есть идеи, предложения, почему это может работать так? Может быть, есть проблема с передачей значения файла в действие «Изменить»?


EDIT: ЭТО ДЕЙСТВИТЕЛЬНО СТРАННО КАК ДАЖЕ, КОГДА Я УДАЛЯЮ
using (Html.BeginForm("Index","Profile",FormMethod.Get, new { enctype="multipart/form-data" }))

Источник страницы все еще имеет:

<body>

    <form method="post" action="6111e591-b92d-4bcb-b214-ab8f664b35f9" id="form1">

Я имею в виду, я не могу изменить тег, но понятия не имею, почему: /

Ответы [ 3 ]

1 голос
/ 09 июня 2011

Решение этой проблемы при:

  1. Мы используем Master.Site,
  2. Мы хотим загрузить файл в виде,
  3. Мы уверены, что это должно работать, но у нас все время есть ноль,

Тогда:

  1. Ребята были правы - у меня было неправильное имя на мой взгляд - проверьте это!
  2. Проверьте исходный код вашего представления, и если у вас есть 2 тега , вы должны удалить тег с главного сайта, так как второй игнорируется!

Теперь это должно работать.

1 голос
/ 08 июня 2011

Попробуйте изменить: -

public ActionResult Edit(string id, HttpPostedFileBase file, 
  FormCollection formValues)

в: -

public ActionResult Edit(string id, HttpPostedFileBase image, 
  FormCollection formValues)

как имя вашего ввода image

 <input type="file" id="Image" name="Image" />

1012 * редактировать * Честно говоря, что-то еще останавливает привязку имиджа. Это вся форма, которую вы отправили?

Несколько вещей для проверки

  1. У вас HTTPOST, украшающий ваш метод дважды, хотя я не верю, что это должно иметь значение.
  2. Просмотрите исходный код и убедитесь, что в источнике больше ничего нет с именем name=image.
  3. Перед повторным тестированием убедитесь, что вы очистили кэш и убедитесь, что источник указан правильно
  4. Попробуйте использовать <form action="/profile/index" method="post" enctype="multipart/form-data">
  5. Судя по вашему последнему редактированию, у вас есть проблемы с мастер-страницами / макетом? Это гибрид mvc / webforms?
0 голосов
/ 08 июня 2011

Что ж, по вашему мнению, вы назвали входной файл file, но ваш метод действия принимает параметр под названием file.Переименуйте один из них, и он должен работать.

...