0

画像のアップロードである PartialView があり、基本的にいくつかの画像と通常のアップロードボタンを表示しています:-

@model MvcCommons.ViewModels.ImageModel

<table>
    @if (Model != null)
    {
        foreach (var item in Model)
        {
            <tr>
                <td>
                    <img src= "@Url.Content("/Uploads/" + item.FileName)" />
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Description)
                </td>
            </tr>    
        }
    }

</table>

@using (Html.BeginForm("Save", "File", FormMethod.Post, new { enctype = "multipart/form-data" })) {
    <input type="file" name="file" />
    <input type="submit" value="submit" /> <br />
    <input type="text" name="description" /> 
}

今、私の考えは、これを別のページに置くことです。すでに 1 ページで試してみて、問題なく動作していますが、画像をアップロードすると、

public ActionResult ImageUpload()
{
    ImageModel model = new ImageModel();
    model.Populate();
    return View(model);
}

「前の」ビュー、つまりこの部分ビューをホストしているビューに戻りたいですか? return View(model)上記のようにすると、見たくない部分ビューに入りますImageUpload

あなたの助けと時間をありがとう。

***更新* ** * ** * ** とりあえず単純なルートに行き、実際のビュー名をハードコーディングしました

public ActionResult ImageUpload()
{
    ImageModel model = new ImageModel(); 
    model.Populate(); 
    return View("~/Views/Project/Create.cshtml", model); 
}

ただし、エラーが発生しました:-

ディクショナリに渡されたモデル アイテムのタイプは ですMvcCommons.ViewModels.ImageModelが、このディクショナリにはタイプ のモデル アイテムが必要MvcCommons.Models.Projectです。

4

1 に答える 1

2

必要なビューの名前の文字列を受け取るオーバーロードを使用します。

http://msdn.microsoft.com/en-us/library/dd460310

protected internal ViewResult View(
        string viewName,
        Object model
)

すなわち

return View("ViewName", model);

これが別のページにある場合は、アクションパラメータを介してコンテキストを挿入できます。

public ActionResult ImageUpload(string parentViewName)
{
    ImageModel model = new ImageModel();
    model.Populate();
    return View(parentViewName, model);
}

注:パスではなく、ビュー名のみを渡す必要があります。

return View("Create", model);
于 2012-06-01T12:38:30.420 に答える