1

我正在尝试简单上传图像,但我的控制器中的 HttpPostedFileBase 始终保持为空。

这是页面:

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

<fieldset>
    <legend>PictureModel</legend>

    <div class="editor-label">
        <%: Html.LabelFor(model => model.PrivacyTypeID) %>
    </div>
    <div class="editor-field">
        <%: Html.DropDownList("PrivacyTypeID", null, new { name = "PrivacyTypeID", title = "Please select privacy type.", id = "PrivacyTypeID" }) %>
        <%: Html.ValidationMessageFor(model => model.PrivacyTypeID) %>
    </div>
    <div>
        Upload Image: <input type="file" name="File1" />
    </div>        
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

这是页面的控制器:

[HttpPost]
    public ActionResult AddPicture(Guid id, PictureModel model, HttpPostedFileBase File1)
    {
        try
        {

            if (ModelState.IsValid)
            {
                var file = Request.Files[0];
                try
                {
                    Guid albumid = id;

                    if (File1 != null)
                    {

......

谁能指导我我有什么问题?我尝试了一切但没有结果

4

2 回答 2

0

更改此行:

Upload Image: <input type="file" name="File1" id="File1" />

并改变这个:

public ActionResult AddPicture(Guid id, PictureModel model, HttpPostedFile File1)
于 2013-05-03T11:46:35.790 回答
0

这里需要注意的几件事可能是错误的,或者不是正确的方法:

  1. 应该设置的表单中的 Guid id 在哪里。Html.Hidden(yourid);Html.HiddenFor(model => model.id);<-- 确保事先在后者上设置模型,例如:

    public ActionResult Index(){
        PictureModel p = new PictureModel();
        p.id = Guid.NewGuid();
        return View(p);
    }
    
  2. 对 dropdownList 使用正确的方法,您的映射在这里也是错误的:

正确的方法是使用:

 DropDownListFor(model => model.PrivacyTypeID, model => model.selectListOfPrivacyTypes, "-- Select Privacy Type --");

如果您确实想使用下拉列表方法,那么您应该使用名称PictureModel.PrivacyTypeID而不是PrivacyTypeID让映射正常工作

我不确定它是否会解决文件处理为空的问题,但它肯定会是更好的代码。

于 2013-11-20T09:33:42.787 回答