在控制器类中找不到HttpPost方法

时间:2013-07-24 21:22:16

标签: html5 entity-framework asp.net-mvc-4

我有一个html表单,它使用HTTP.Post与控制器类中的方法进行通信。我没有表示此方法的特定视图,只是没有相对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'或其主节点,或者没有视图引擎支持搜索的位置”。我知道它正在搜索一个View,但我之前从未需要过这个过程。

谁能看到我做错了什么?也许我需要发布更多我的代码?

1 个答案:

答案 0 :(得分:1)

您所做的更改是return View(Callout);中的catch

不提供视图名称的

return View(...)搜索与您的操作同名的视图。你应该在Views -> SaveCallout -> SaveCallout.cshtml放置一个View,如果它是有意的,但我认为不是。

我不知道您正在制作HttpPost的视图。让它被称为Foo。如果您想再次返回Foo视图,则应执行以下操作:

catch(...)
{
    return View("Foo", Callout);
}