2014-01-06 4 views
3

у меня есть что-то вроде этого:передать несколько параметров в Html.BeginForm MVC4 действия контроллера

public ActionResult ImageReplace(int imgid,HttpPostedFileBase file) 
    { 
     string keyword = imgid.ToString(); 
     ....... 
    } 

и в моем .cshtml:

@model Models.MemberData 
    @using (Html.BeginForm("ImageReplace", "Member", FormMethod.Post, 
      new { imgid = @Model.Id, enctype = "multipart/form-data" })) 
     { 
    <input type="file" name="file" id="file" value="Choose Photo" /> 
    <input type="submit" name="submit" value="Submit" /> 
    } 

здесь значение imgid не переходя к действию контроллера , показать ошибку. Словарь параметров содержит нулевую запись для параметра «imgid» типа, отличного от нуля, «System.Int32» для метода «System.Web.Mvc.ActionResult ImageReplace

ответ

12

Используйте this overload, что позволяет различать значения маршрута и HTML attribtues:

@using (Html.BeginForm(
     "ImageReplace", "Member", 
     new { imgid = @Model.Id }, 
     FormMethod.Post, 
     new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="file" id="file" value="Choose Photo" /> 
    <input type="submit" name="submit" value="Submit" /> 
} 
3

Вы также можете передать imgid как поле в форме, что-то вроде:

@model Models.MemberData 
@using (Html.BeginForm("ImageReplace", "Member", FormMethod.Post, 
     new { enctype = "multipart/form-data" })) 
{ 
    @Html.HiddenFor(x => x.Id) 
    <input type="file" name="file" id="file" value="Choose Photo" /> 
    <input type="submit" name="submit" value="Submit" /> 
} 
2

Используйте это:

 @using (Html.BeginForm("ImageReplace", "Member", 
     new { imgid = @Model.Id }, FormMethod.Post, 
    new { enctype = "multipart/form-data" })) 
Смежные вопросы