2013-07-24 34 views
0

我有一个使用HTTP.Post与控制器类中的方法对话的html表单。我没有表示这种方法的特定视图,只是一个没有相对cshtml视图类的HttpPost ActionResult。我的代码调用此方法是:在控制器类中找不到HttpPost方法

@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 '或其主人没有被发现或没有视图引擎支持搜索的位置“。我知道它正在寻找一个视图,但我从未需要这个过程。

任何人都可以看到我做错了什么?也许我需要发布更多我的代码?

+0

什么是控制器类的名称,其中'SaveCallout'操作被定义? –

+0

为什么你的控制器名称为'SaveCallout'与后动作名称相同? 'BeginForm(“SaveCallout”,“SaveCallout”)'我只是好奇。 – Win

+0

SaveCalloutController是控制器类的名称。我不确定为什么我会这样做,这在当时是有道理的,正如我之前说过的,它曾经运行起来直到我改变了一些东西,但我不确定是什么! –

回答

1

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

return View(...)未提供视图名称将搜索与您的操作具有相同名称的视图。如果这是故意的,你应该在Views -> SaveCallout -> SaveCallout.cshtml处进行查看,但我不认为它是。

我不知道你是从哪个视角制作HttpPost。让它被称为Foo。如果你想再次返回到Foo视图,你应该这样做:

catch(...) 
{ 
    return View("Foo", Callout); 
} 
相关问题