MVC 3 Модальные всплывающие и файловые входы - PullRequest
0 голосов
/ 01 декабря 2011

Хорошо, это сводит меня с ума!У меня есть простое модальное всплывающее окно, запускаемое Ajax.ActionLink в этом всплывающем окне. У меня есть стандартный элемент управления вводом файлов HTML, а также некоторые другие текстовые поля.При отправке я могу получить все свои текстовые поля без проблем, но файл всегда нулевой.Ниже приведена копия моего кода:

Действие обновления:

[HttpPost]
    public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase FileData, string clipID)
    {
        return RedirectToAction("Clips");
    }

Это форма из части, которая показана в модальном окне:

<div class="modal_content">
    @using (Html.BeginForm("UpdateClip", "EditProfile", new { clipid = Model.ID }, FormMethod.Post, new { @id = "modalpopupform", enctype = "multipart/form-data" }))
    {
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Clip Description</li>
            <li class="cell">
                @Html.TextBoxFor(m => m.Description, new { style = "width: 350px" })<br />
                @Html.ValidationMessageFor(m => m.Description)
            </li>
        </ul>
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Base Cost</li>
            <li class="cell">
                @Model.BaseCost
            </li>
        </ul>
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Cost</li>
            <li class="cell">
                @Html.TextBoxFor(m => m.UserCost, new { style = "width: 350px" })<br />
                @Html.ValidationMessageFor(m => m.UserCost)
            </li>
        </ul>
        <ul class="list_to_row">
            <li class="cell" style="width: 75px">Preview Image</li>
            <li class="cell">
                <input type="file" id="file" name="file" />
            </li>
        </ul>
        <div class="clearfix"></div>
        <div class="modal_button_area">
            <input id="submitmodalpopup" type="submit" value="Update" class="button" />
            <input id="closemodalbox" type="button" value="Cancel" class="button" />
        </div>     
    }
</div>

Может кто-нибудь, пожалуйста, пролить свет на это?Похоже, у Google нет ничего, кроме моей комбинации слов или если я пропустил что-то простое, я не знаю.Приветствия.

1 Ответ

0 голосов
/ 01 декабря 2011

В вашем действии аргумент называется FileData, поэтому будьте последовательны и в вашей разметке:

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

Или, если вы хотите сохранить файл в качестве имени для ввода, переименуйте аргумент в вашем действии:

[HttpPost]
public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase file, string clipID)
{
    return RedirectToAction("Clips");
}

Но лично я включил бы этот файл в качестве свойства моей модели представления, и я не буду беспокоиться о дополнительном аргументе:

public class ClipModel 
{
    ... some properties

    public HttpPostedFileBase File { get; set; }
}

и затем в моем строго типизированном представлении я буду использовать строго типизированный помощник для генерации входного файла, чтобы мне не пришлось беспокоиться о правильном именовании:

<li class="cell">
    @Html.TextBoxFor(x => x.File, new { type = "file" })
</li>

и ваша подпись действия контроллера будет такой простой, как:

[HttpPost]
public ActionResult UpdateClip(ClipModel model)
{
    return RedirectToAction("Clips");
}

так должно выглядеть большинство сигнатур действий контроллера POST.

...