1

私のサイトはIIS7.5でホストされています私は以下のようなコントローラーアクションを持っています

[HttpPost]
    public ActionResult Create(ClientDocument clientdocument,HttpPostedFileBase FilePath)
    {
        if (ModelState.IsValid)
        {
            try
            {
                if (FilePath != null && FilePath.ContentLength > 0)
                {
                    var filename = Path.GetFileName(FilePath.FileName);
                    string ext = filename.Split(char.Parse(".")).LastOrDefault();
                    clientdocument.FilePath = clientdocument.Title + "." + ext;
                    var path = Path.Combine(Server.MapPath("~/Uploads"), clientdocument.Title + "." + ext);
                    FilePath.SaveAs(path);
                    db.ClientDocuments.Add(clientdocument);
                    db.SaveChanges();
                    return RedirectToAction("../");
                }                    
            }
            catch(Exception ex)
            {
                return HttpNotFound("There Was A Problem Uploading File And Creating A Record");
            }
        }

        ViewBag.ClientID = new SelectList(db.Clients, "ClientID", "FullName", clientdocument.ClientID);
        return View(clientdocument);
    }

ボタンをクリックすると、ファイルをアップロードしようとしますが、次のエラーメッセージが表示されます

http 404ファイルまたはディレクトリが見つかりません探しているリソースが削除されているか、名前が変更されているか、一時的に利用できない可能性があります

VS2010ですべてが正常に機能しているときに、このファイルをアップロードするようにiis7.5を構成する方法を支援してください。

編集

変更後@keshav言及されたビュー:

    @using (Html.BeginForm("Create", "ClientDocument", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
            <legend>Attach New Client Document</legend>
    <div class="editor-label">
                @Html.LabelFor(model => model.FilePath)
            </div>
            <div class="editor-field">
                <input type="file" id="FilePath" name="FilePath" />
                @Html.ValidationMessageFor(model => model.FilePath)
            </div>
   <fieldset>
}

およびコントローラー:

[HttpPost,ActionName("Create")]
    public ActionResult Create(ClientDocument clientdocument,HttpPostedFileBase FilePath)
    {
        if (ModelState.IsValid)
        {
            try
            {
                if (FilePath != null && FilePath.ContentLength > 0)
                {
                    var filename = Path.GetFileName(FilePath.FileName);
                    string ext = filename.Split(char.Parse(".")).LastOrDefault();
                    clientdocument.FilePath = clientdocument.Title + "." + ext;
                    var path = Path.Combine(Server.MapPath("~/Uploads"), clientdocument.Title + "." + ext);
                    FilePath.SaveAs(path);
                    db.ClientDocuments.Add(clientdocument);
                    db.SaveChanges();
                    return RedirectToAction("Index", "Home");
                }                    
            }
            catch(Exception ex)
            {
                return HttpNotFound("There Was A Problem Uploading File And Creating A Record");
            }
        }

        ViewBag.ClientID = new SelectList(db.Clients, "ClientID", "FullName", clientdocument.ClientID);
        return View(clientdocument);
    }

それでも私は以前と同じ問題を抱えています。

4

4 に答える 4

2

404 エラーは、サーバー上に存在しない URL を要求しようとしたことを意味します。ビューがどのように見えるかを示していませんが、ハードコーディングされた URL があり、URL ヘルパーを使用してフォームを生成していないと思われます。したがって、このコントローラー アクションを指すフォームを生成する正しい方法は次のとおりです。

@using (Html.BeginForm("Create", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    ...
}

別の問題は、コントローラーのアクションにあります。以下は間違っています。

return RedirectToAction("../");

RedirectToAction メソッドは、提供する URL ではなく、アクション名を想定しています。したがって、アクション名 (およびアクションが別のコントローラーにある場合はオプションのコントローラー名) を渡していることを確認してください。

return RedirectToAction("Index", "Home");

また、コントローラーの作成アクションで、返すファイル アップロードの処理中に例外がHttpNotFound発生した場合、クライアントで 404 エラーが発生します。したがって、このコードが例外をスローしないことを確認してください。何が問題なのかを判断できるようにするために、単純にリダイレクトするのではなく、エラーをログに記録することもできます。

于 2012-05-12T09:52:03.747 に答える
0

アップロード後/を忘れたと思います

var path = Path.Combine(Server.MapPath( "〜/ Uploads /")、clientdocument.Title+"。"+ext);

于 2012-05-12T03:18:47.230 に答える
0

私の知る限り、IISの設定を変更する必要はありません... @Darin Dimitrovが例外について言ったことに加えて、catch句のコードを次のように変更できますか:

catch(Exception ex)
{
        ViewBag.errorMessage = ex.Message;
        return View("Error");
}

エラーページ(共有ビューフォルダーの下にあるはずです)に次の行を追加します

@ViewBag.errorMessage

コードがサーバー上で例外をスローしていると考えていますが、ローカルで実行した場合はそうではありません。これにより、問題を絞り込むことができます。それでも 404 エラーが発生する場合は、設定に問題がある可能性があります。

于 2012-05-13T05:35:44.850 に答える
0

これはアプリを公開した後に起こりますか? その場合、アップロード フォルダがコピーされていない可能性があります。すべてのファイルを含めるように発行設定を変更しない限り、Vs2010 はカスタム フォルダーを発行しません。または、サイトの場所を参照して、自分でフォルダーを作成することもできます

編集

同様の設定のアプリがあり、正常に動作しているようです。私が気付く唯一の違いは、html.begin にあります。アクションとコントローラーを明示的に指定します。

私の見解

@using (Html.BeginForm("Upload", "Administrator", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true, "File upload was unsuccessful. Please correct the errors and try again.")
    <input type="file" name="FileUpload1" />
    <input type="submit" name="Submit" id="Submit" value="Upload" onclick="return confirm('Doing this will override any previous data. Are you sure you want to proceed?')"/>
}

私のコントローラー:

[HttpPost, ActionName("Upload")]
public ActionResult UploadPost()
{
  // my code
}

アクションとコントローラーを指定してみて、それが役立つかどうかを確認してください。

于 2012-05-12T04:43:04.657 に答える