1

本当はテキストボックス内の画像とテキストをコントローラーに送りたいのですが...

@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>

        }

ブロブをビューに直接送信しています。これが基本的に問題です。モデルを使用してテキスト、ブロバール、画像を挿入するにはどうすればよいですか?

4

1 に答える 1

3

MVC 4 での画像のアップロード/表示を参照してください。

これは、画像をアップロードするのに大いに役立ちました

ビューからコントローラーにデータを取得するという点では、より良い方法は、次のようなビューモデルを使用することです

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;
}

お役に立てれば :)

于 2013-10-28T13:28:26.120 に答える