0

HTTP.Post を使用してコントローラー クラスのメソッドと通信する html フォームがあります。このメソッドを表す特定のビューはありません。相対 cshtml ビュー クラスのない HttpPost ActionResult だけです。このメソッドを呼び出す私のコードは次のとおりです。

@using (Html.BeginForm("SaveCallout", "SaveCallout"))
{  
    <div class="editor-field">
        @Html.DropDownListFor(m => m.ClientId, new SelectList(Model.Clients, "ClientId", "Name"))
        @Html.ValidationMessageFor(model => model.ClientId)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.Description)
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(model => model.Description, new { @id = "descriptionText" })
        @Html.ValidationMessageFor(model => model.Description)
    </div>
    <input class="btn btn-primary btn-large" style="float: left; margin-right: 10px;" type="submit" value="Create Callout" />
        <a class="btn btn-primary btn-large" href="@Url.Action("EmptyThisCallout", "Callout", null)" id="EmptyCart" style="float: left;">Clear Callout</a>
}

そして、私のコントローラーメソッドは次のとおりです。

    [HttpPost]
    public ActionResult SaveCallout(CalloutViewModel viewModel)
    {
        var Callout = new Callout();
        TryUpdateModel(Callout);
        try
        {
            Callout.ClientId = viewModel.ClientId;

            Callout.CalloutDate = DateTime.Now;
            //Save invoice
            proent.Callouts.Add(Callout);
            proent.SaveChanges();
            //Process the invoice
            var tempCallout = CalloutLogic.GetCallout(this.HttpContext);
            tempCallout.CreateCallout(Callout);

            return RedirectToAction("Complete", new { id = Callout.CalloutId });
        }
        catch
        {
            //Invalid - redisplay with errors
            return View(Callout);
        }
    }

これは以前も同様のコンテキストで問題なく機能していましたが、「ビュー 'SaveCallout' またはそのマスターが見つからないか、検索された場所をサポートするビュー エンジンがありません」というエラー メッセージが表示されるようになりました。ビューを検索していることは理解していますが、このプロセスでビューが必要になったことはありません。

誰かが私が間違っていることを見ることができますか? 多分私は私のコードをもっと投稿する必要がありますか?

4

1 に答える 1

1

行った変更はreturn View(Callout);にありcatchます。

return View(...)ビュー名を指定しないと、アクションと同じ名前のビューが検索されます。意図的だった場合は View at を配置する必要がありますが、Views -> SaveCallout -> SaveCallout.cshtmlそうではないと思います。

あなたがどのような視点からそれを作っているのかわかりませんHttpPost。と呼ばせてFooください。Foo再びビューに戻りたい場合は、次の操作を行う必要があります。

catch(...)
{
    return View("Foo", Callout);
}
于 2013-07-24T22:02:59.500 に答える