Включение загрузки файлов в виде формы Razor - PullRequest
0 голосов
/ 09 декабря 2011

MVC 3, VB.NET.В моем приложении есть форма, которая получает основную информацию от пользователя, а затем позволяет ему загрузить резюме.Я делаю это прямо сейчас, используя перенаправление в другую форму, единственная цель которой - выбрать файл для загрузки и затем отправить его. На мой взгляд, небрежно. Я пытался сделать это из той же формы, но файлтеряется при отправке .. Хотя я не уверен в этом, я полагаю, что это потому, что я не использую правильный синтаксис в форме для обработки файла ... Ниже представлен вид View, а затем функция post контроллера ..

@ModelType xxxxxxxx.courseproposal
@Code
ViewData("Title") = "Course Proposal"
End Code
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript">         </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Using Html.BeginForm()
@Html.ValidationSummary(True)
@<fieldset>
 <table>
    <tr>
        <th>Presenter 1</th>
    </tr>

    <tr>
        <td>First Name</td>
        <td>Last Name</td>
        <td>Title</td>
        <td>Phone Number</td>
        <td>Email Address</td>

    </tr>
    <tr>
        <th>@Html.EditorFor(Function(model) model.Name_First1) @Html.ValidationMessageFor(Function(model) model.Name_First1)</th>
        <th>@Html.EditorFor(Function(model) model.Name_Last1) @Html.ValidationMessageFor(Function(model) model.Name_Last1)</th>
        <th>@Html.EditorFor(Function(model) model.Title_1) @Html.ValidationMessageFor(Function(model) model.Title_1)</th>
        <th>@Html.EditorFor(Function(model) model.phone_number1) @Html.ValidationMessageFor(Function(model) model.phone_number1)</th>
        <th>@Html.EditorFor(Function(model) model.email_address1) @Html.ValidationMessageFor(Function(model) model.email_address1)</th>
         <th>@Html.Label("file","Filename:")<input type="file" name="file" id="file" />  </th>
    </tr>
</table> 

<div id="sidebar3">

 <p>
 <input type="submit" value="Submit Course Proposal" />
 </p>

 <p>
 @Html.ActionLink("Back to List", "Index")
 </p>
 </div>

</fieldset>
End Using

А функция поста такая:

   <AcceptVerbs(HttpVerbs.Post)>
    Function CourseProposal(ByVal courseprop As courseproposal) As ActionResult
        courseprop.conf_Number = _AnnualNumber
        db.courseproposals.AddObject(courseprop)
        db.SaveChanges()
        _id = courseprop.idCourseProposal
        Dim _filename As String = String.Empty
        For Each File As String In Request.Files
            Dim hpf As HttpPostedFileBase = TryCast(Request.Files(File), HttpPostedFileBase)
            If hpf.ContentLength = 0 Then
                Continue For
            End If
            Dim savedfileName As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CoursePropResumes\" + Path.GetFileName(hpf.FileName)
            hpf.SaveAs(savedfileName)
            _filename = hpf.FileName
        Next

1 Ответ

4 голосов
/ 09 декабря 2011

Ваша форма требует enctype="multipart/form-data".

Попробуйте

Html.BeginForm(null, null, FormMethod.Post, new { enctype="multipart/form-data"})

РЕДАКТИРОВАТЬ : Это, конечно, для C #.В VB это должно читаться как

Html.BeginForm(Nothing, Nothing, FormMethod.Post, New With { .enctype="multipart/form-data"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...