0

ご容赦ください、私はasp.net MVC 3を学んでいます.. :)

膨大な数のフォーラム スレッドを検索しましたが、自分のプロジェクトに適した解決策を実際に見つけることができません..

シナリオ: 体をレンダリングする _layout があります。現在苦労しているボディには、ajax.actionlink とプレースホルダー div を介して更新される部分ビューがあります。

メインビュー(短縮)

<div class="mini-menu-content">
    Product
    <ul>
        <li>
            @Ajax.ActionLink("Aanmaken", "_addProduct", new { type = "Beheer/Add/_addProduct" },
                            new AjaxOptions
                             {
                                 UpdateTargetId = "container",
                                 InsertionMode = InsertionMode.Replace,
                                 HttpMethod = "GET"
                             })
        </li>
    </ul>
</div>
<div id="container">@Html.Partial("Beheer/_welkom")
</div>

その部分的なビューには、Html.BeginForm があり、すべての必要な (モデル) 製品属性の入力が含まれています。また、ユーザーにファイルをアップロードするように求めます。

部分図 (これも短縮)

@model BlokCWebwinkelGroep3.Models.Product
@using (Html.BeginForm("_addProduct", "Beheer", FormMethod.Post,
 new
 {
     enctype = "multipart/form-data",
     id = "Form",
     name = "Form"
 }))
{   
//All the input fields for the model

<div class="editor-label">
    Plaatje:
</div>
<div class="editor-field">
    <input type="file" name="imageFile" required="true" />
    <input type="submit" value="Aanmaken" />
</div>
}

このフォームは、ファイル (画像) を保存してパス (todo) を取得するアクションメソッドにリンクし、パスと製品をデータベースに保存し、ビューを返します. 残念ながら問題があります. そのビューを返す方法がわからないので、メイン ビューのコンテナ div のコンテンツを置き換えます。新しいページを取得するだけです...

コントローラ

public ActionResult Beheer()
{
    return View();
}

public ActionResult _addProduct(string type)
{
    return PartialView(type);
}

[HttpPost]
    public ActionResult _addProduct(HttpPostedFileBase imageFile, Product product)
    {
        if (ModelState.IsValid && (imageFile != null && imageFile.ContentLength > 0))
        {
            //Save to folder, get path, call dbcontroller and save all of it in db.
            return PartialView("Beheer/_welkom");
        }
        else
        {
            return PartialView("Beheer/Add/_addProduct", product);
        }
    }

結びの質問

メイン ビューにある div id="container" の _addProduct パーシャルを、コントローラーの actionmethod _addProduct からレンダリングするにはどうすればよいですか?

事前に感謝します。

4

1 に答える 1

1

あなたの部分的なビューでは、現在Html.BeginForm、通常のタグをレンダリング<form>し、サーバーへの完全なポストバックを行う標準があります。これは、AJAX 呼び出しを受けていない理由を説明しています。

一方、このフォームはファイルをサーバーにアップロードする必要があります。しかし、ご存じのとおり、AJAX を使用してファイルをサーバーにアップロードすることはできません。jquery.formもちろん、blueimp file uploadやなどのJavaScriptファイルアップロードプラグインを使用しない限りUploadify. ところで、HTML5 File APIAJAX リクエストを使用してファイルをサーバーにアップロードすることをサポートする最新のブラウザでは、. 前述のプラグインは基本的に、クライアント ブラウザーの機能を検出し、必要に応じてフォールバック メカニズム (古いブラウザーの非表示の iframe など) を使用するタスクを簡素化します。

結論として、ファイルをサーバーにアップロードして同じページに留まるには、javascript を使用する必要があります。

于 2013-11-01T21:06:56.347 に答える