2010-10-30 48 views
0

我试着在asp.net mvc2上使用mvc2模板并使用它。在模板之后,我创建了我自己的模型,控制器和视图,并在其中分别存放了文件夹位置我还为此控制器和视图更改了global.asax中的默认路由。现在我的视图正在被加载,但是当我点击我的视图中的按钮时,我的控制器中写入的方法都没有被击中。可能是什么原因,我错过了什么?我还想在我的视图呈现之前从我的控制器调用预加载方法。请帮助......卡住了。 这里是我的看法ASP.Net MVC 2 - 按钮点击视图不调用控制器中的任何方法?我错过了什么?

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CreditCashAllocationSystem.Models.ConfigurationModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Configuration 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Configuration</h2> 

    <% using (Html.BeginForm()) {%> 
     <%= Html.ValidationSummary(true) %> 

     <fieldset> 
      <legend>Fields</legend> 

      <div class="editor-label"> 
       <%= Html.LabelFor(model => model.DropOffDaysForward) %> 
      </div> 
      <div class="editor-field"> 
       <%= Html.TextBoxFor(model => model.DropOffDaysForward) %> 
       <%= Html.ValidationMessageFor(model => model.DropOffDaysForward) %> 
      </div> 

      <div class="editor-label"> 
       <%= Html.LabelFor(model => model.DropOffDaysBackward) %> 
      </div> 
      <div class="editor-field"> 
       <%= Html.TextBoxFor(model => model.DropOffDaysBackward) %> 
       <%= Html.ValidationMessageFor(model => model.DropOffDaysBackward) %> 
      </div> 

      <div class="editor-label"> 
       <%= Html.LabelFor(model => model.DealDropOffDateDays) %> 
      </div> 
      <div class="editor-field"> 
       <%= Html.TextBoxFor(model => model.DealDropOffDateDays) %> 
       <%= Html.ValidationMessageFor(model => model.DealDropOffDateDays) %> 
      </div> 

      <div class="editor-label"> 
       <%= Html.LabelFor(model => model.DealHistoryDays) %> 
      </div> 
      <div class="editor-field"> 
       <%= Html.TextBoxFor(model => model.DealHistoryDays) %> 
       <%= Html.ValidationMessageFor(model => model.DealHistoryDays) %> 
      </div> 

      <div class="editor-label"> 
       <%= Html.LabelFor(model => model.UnappliedHistoryDays) %> 
      </div> 
      <div class="editor-field"> 
       <%= Html.TextBoxFor(model => model.UnappliedHistoryDays) %> 
       <%= Html.ValidationMessageFor(model => model.UnappliedHistoryDays) %> 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%= Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 

,这里是我的控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace CreditCashAllocationSystem.Controllers 
{ 
    public class ConfigurationController : Controller 
    { 

     // 
     // GET: /Configuration/Create 

     //will be called on Form Load 
     public ActionResult Create() 
     { 
      return View("Configuration"); 
     } 

     // 
     // POST: /Configuration/Create 


     //Method will be called once u click on create/save button 
     [HttpPost] 
     public ActionResult Create(FormCollection collection) 
     { 
      try 
      { 
       // TODO: Add insert logic here 

       return View("Configuration"); 
      } 
      catch 
      { 
       return View("Configuration"); 
      } 
     } 
    } 
} 

这里是我的Global.asax:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 

namespace CreditCashAllocationSystem 
{ 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 

    public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Configuration", action = "Create", id = UrlParameter.Optional } // Parameter defaults 
      ); 
     } 

     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 

请帮帮忙,我失去了什么?

回答

0

这个方法应该得到调用的时候,你按一下按钮,但所有你正在做的是要马上回相同的观点:

[HttpPost] 
public ActionResult Create(FormCollection collection) 
{ 
    try 
    { 
     // TODO: Add insert logic here 
     //Seriously, add some code here, or all you do is go back to the same view. 
     return View("Configuration"); 
    } 
    catch 
    { 
     return View("Configuration"); 
    } 
} 
+0

做一些断点调试可以帮助证实了这一点。 – xandy 2010-10-30 15:45:06

1

你需要指定,当你调用BeginForm控制器和行动

<% using(Html.BeginForm("Create", "Configuration")) {%> 
+0

谢谢。它现在工作:) – shraddha 2010-10-30 21:37:17

0

你的代码看起来不错,在我的结束它工作正常,所以我不知道这是正确的或错误的答案。

,但如果没有,那么工作,你可以尝试为你的第一个问题

[HttpGet] 
    public ActionResult Create() 
    { 
     return View("Configuration"); 
    } 

    [HttpPost] 
    public ActionResult Create(FormCollection collection) 
    { 


    //your code 
    } 

和为贵(返回列表)链接,你需要

[HttpGet] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
在你看来

和一多,您必须启用客户端沉默验证脚本

<%Html.EnableClientValidation(); %>

和你的第二答案

//after your action executed 
    protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     //your code 
     base.OnActionExecuted(filterContext); 
    } 



    //before your action execute 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //your code 
     base.OnActionExecuting(filterContext); 
    } 
相关问题