2013-10-28 90 views
1

其實我要發送的圖像和文本框到控制器的文字...如何使用asp.net mvc中的Html.BeginForm()發送多個參數?

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     @Html.Label("UserName:") <input type="text" id="txtImg" name="txtImg" /><br /><br /> 
      @Html.Label("Upload:")<input type="file" name="image" /><br/>  
     <div id="Preview"> 
     Preview 
    </div> 

     <input class="btn btn-success btnUpload" type="submit" value="upload" /> 

    } 

,我試圖找回他們在以下方式控制:

public ActionResult Upload(HttpPostedFileBase image,string txtImg) 

但我沒有得到文本框的值..代碼有什麼不對嗎?

我有我這樣的示例代碼。

Controller: 
    public ActionResult Upload() 
      { 
       BlobStorageServices _blobstorageservice = new BlobStorageServices(); 
       CloudBlobContainer container = _blobstorageservice.GetCloudBlobContainer(); 
       List<string> blobs = new List<string>(); 
       //List<BlobModel> models = BlobManager.getBlobs(); 
       foreach (var blobItem in container.ListBlobs()) 
       { 
        blobs.Add(blobItem.Uri.ToString()); 

       } 
       return View(blobs); 
      } 
      [HttpPost] 
      public ActionResult Upload(string txtImg,HttpPostedFileBase image) 
      { 
       if (image.ContentLength > 0) 
       { 
        BlobStorageServices _blobstorageservice = new BlobStorageServices();    
        CloudBlobContainer container = _blobstorageservice.GetCloudBlobContainer(); 
        CloudBlockBlob blob = container.GetBlockBlobReference(image.FileName); 
       //BlobManager.insertBlobUri(new BlobImage { Uri = blob.Uri.ToString() }); 
       // string text = model.Name; 
        BlobManager.insertBlobUri(new BlobModel {Name=txtImg,Uri=blob.Uri.ToString()}); 
        blob.UploadFromStream(image.InputStream); 
       } 
       return RedirectToAction("Upload"); 
      } 

    View 
    @using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 
      @Html.Label("UserName:") <input type="text" id="txtImg" name="txtImg" /><br /><br />  
       @Html.Label("Upload:")<input type="file" name="image" id="upload"/><br/>  
      <div id="Preview"> 
      Preview<img id="blah" src="#" alt="your image" /> 
     </div> 

      <input class="btn btn-success btnUpload" type="submit" value="upload" /> 

     } 

    <table style="border:1"> 

     @foreach (var item in Model) 
     { 

      <tr style="border:1"> 

       <td><img src="@item" alt="image" class="img-responsive" width="100" height="100" /></td> 
       <td><button class="btn btn-primary Delete" id="@item" onclick="deleteImage('@item');">Delete</button></td> 
       <td><a class="btn btn-primary Download" href="@item" target="_blank">Download Image</a></td> 
       <td><button class="btn btn-primary Download" onclick="updateImage('@item');">UpdateImage</button></td> 
      </tr> 

     } 

我直接發送到斑點的觀點,這就是問題所在basically..How使用模型來插入文本,bloburl,形象?

+1

請問如果更改參數'上傳(字符串txtImg,HttpPostedFileBase圖像)'秩序工作的呢? – Andrew

回答

3

訪問Uploading/Displaying Images in MVC 4

這幫助我很多上傳圖片

在條款從視圖中檢索數據的控制器更好的方法是使用一個ViewModel像

public class ExampleViewModel 
{ 
    public string Image {get; set;} 
    public string Text {get; set;} 
} 

和您的看法看起來像

@model YourProject.Models.ExampleViewModel 

@using (Html.BeginForm("ExampleController","Home",FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(model => model.Text) 

    <input id="Image" type="file" name="Image" data-val="true" /> 

} 

和控制器

public ActionResult ExampleController(ExampleViewModel model) 
{ 
    //Not sure how you wanted to get the image so I just put this in here 
    foreach (string file in Request.Files) 
    { 
     HttpPostedFileBase hpf=Request.Files[file] as HttpPostedFileBase; 
     if(hpf.ContentLengh==0) 
     continue; 
     string folderPath = Server.MapPath("~/yourFolderPath"); 
     Directory.CreateDirectory(folderPath); 

     string savedFileName = Server.MapPath("~/yourFolderPath/" + hpf.FileName); 
     hpf.SaveAs(savedFileName); 
     model.Image="~/yourFolderPath/" + hpf.FileName; 
    } 
    //this variable is getting the text from the ViewModel 
    string text=model.Text; 
} 

希望這有助於:)

相關問題