1

ファイルをアップロードする必要があり、その方法をいくつか見つけました。私が考えた最善の方法は、次のブログによるものでした

ここにも便利な投稿が見つかりました: stackoverflow topic

しかし、試してみると、失敗します。Visual Studio で次のエラーが発生します。

シーケンスには複数の要素が含まれており、それ以上先に進む必要はありません。

私のコードは次のようになります。

コントローラ:

public PartialViewResult Index(parameterlist)
    {
        var model = new Model();


        return PartialView(model);
    }

[HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        // Verify that the user selected a file
        if (file != null && file.ContentLength > 0) 
        {
            // extract only the filename
            var fileName = Path.GetFileName(file.FileName);

            var path =         Path.Combine(Server.MapPath(@"Path"), fileName);
            file.SaveAs(path);
        }
        // redirect back to the index action to show the form once again
        return RedirectToAction("Index");            
    }

意見:

            <div class="span6">                                
            @using (Html.BeginForm("null", "null", FormMethod.Post, new { enctype = "multipart/form-data" }))
            {
                <input type="file" name="file" />
                <input type="submit" value="OK" />
            }
        </div>

したがって、このパーシャルビューが呼び出された瞬間に actionResult メソッドに移動します。もちろん、ビューがまだ開かれていないため、ファイルは選択されていません。ビューには、他にもいくつかのテキストボックスとドロップダウンがあります。しかし、特別なことは何もありません。誰かが私が間違っていることについて考えを持っていますか? 何か決定的なものを失っているような気がする...

4

2 に答える 2

1

間違った関数の実行を回避するには、Html.BeginForm にある null 値ではなく、Controller と Action を指定する必要があります。

@using (Html.BeginForm("Index", "YourController", FormMethod.Post, ...
于 2012-10-05T12:09:44.777 に答える
0

それらを 1 つのフォームにマージしようとしたので、フォームは次のようになりました。

@using (Ajax.BeginForm("Method", "Controller",new { enctype = "multipart/form-data" }, new AjaxOptions { HttpMethod = "Post", OnSuccess = "Method" }, new { @class = "css", id = "formname" }))
{
   Some divs and stuff

   <input type="file" name="file" class="btn btn-inverse" />
   </div>

関数は次のようになります。

[HttpPost]
        public void _SaveDocument(Model model, HttpPostedFileBase file)
        {
            if (file != null && file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath(@"Path"), fileName);
                file.SaveAs(path);

                var command = new command()
                {
                    Model = model
                };
                commandDispatcher.Dispatch(command);
            }            
        }

ただし、ファイルは追加されず、常に null です

于 2012-10-05T13:24:04.253 に答える