2012-10-03 12 views
0

我的網址是這樣的:http://localhost:2570/Test/Index/5/100100/44,其中5 = id,100100 = jobno,44 = instid。但是,當我嘗試在Controller中訪問這些值時,我所得到的都是空值。我錯過了什麼?爲什麼RouteData.Values [「someValue」]在Controller中顯示爲空?

TestController.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using InspectionWebFormsMVC.ViewModels; 
using InspectionWebFormsMVC.Models; 
using InspectionWebFormsMVC.Services; 
using System.Data; 

namespace Stuff.Controllers 
{ 
    public class TestController : Controller 
    { 
     private WebFormsDataDbContext dbModels; 

     public TestController() 
     { 
      dbModels = new WebFormsDataDbContext(); 
     } 

     [HttpPost] 
     public ActionResult SaveEmailStatus(string empid, int? instid, long? emailid, long? ctrltypeid) 
     { 

      if (ModelState.IsValid) 
      { 
      } 

      var bar = this.ControllerContext.RouteData.Values["id"]; 
      var blah = this.RouteData.Values["id"]; 
      var foo = this.RouteData.Values["instid"]; 
      int? iid = instid; 
      int? formid = Convert.ToInt32(RouteData.Values["id"].ToString()); 
      return RedirectToAction("Index", new { id = formid.Value, instid = iid.Value}); 
     } 
    } 
} 

Index.cshtml

@model IEnumerable<Stuff.Models.Part> 

@{ 
    ViewBag.Title = "Testing Editor Templates"; 
} 

@using System.Web.WebPages; 
@using System.Web.Script.Serialization; 
@using Stuff.ViewModels; 

<h2>Test Control for Webforms</h2> 


@using (Html.BeginForm("SaveEmailStatus", "Test", new { instid = ViewContext.RouteData.Values["instid"], empid = "107" }, FormMethod.Post)) 
{ 
    <div style="clear:both;"> 
     <div style="float:right;"> 
      <div style="text-align:left;">     
       @foreach (var line in ViewBag.EmailStatus as List<FormRowModel>) 
       { 
        @line.Description.ToString() 
        <br /><br /> 
        @line.RowInput[0].RowCtrl.DefaultValues[0].Label 
        @: &nbsp; 
        @line.RowInput[0].InputtedDate.ToString() 
        <br /> 
        @line.RowInput[1].RowCtrl.DefaultValues[0].Label 
        @: &nbsp; 
        @line.RowInput[0].InputtedData 
        <br /><br /> 
        @Html.Hidden("emailid", line.RowInput[0].InputtedDataID) 
        @Html.Hidden("ctrltypeid", line.RowInput[0].RowCtrl.CtrlTypeID) 
       }    
       <input type="submit" value="Send Email" /> 
      </div> 
     </div> 
    </div> 
} 

的Global.asax.cs

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

namespace Stuff 
{ 
    // 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 RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      filters.Add(new HandleErrorAttribute()); 
     } 

     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "ProjectInfos", // Route name 
       "ProjectInfo/{action}/{id}/{jobno}/{instid}/{section}", // URL with parameters 
       new { controller = "ProjectInfo", action = "Index", id = UrlParameter.Optional, jobno = UrlParameter.Optional, instid = UrlParameter.Optional, section = UrlParameter.Optional } // Parameter defaults 
      ); 

      routes.MapRoute(
       "SectionsData", // Route name 
       "Test/Sections/{id}/{jobno}/{instid}/{section}", // URL with parameters 
       new { controller = "TestEdit", action = "Sections", id = UrlParameter.Optional, jobno = UrlParameter.Optional, instid = UrlParameter.Optional, section = UrlParameter.Optional } // Parameter defaults 
      ); 

      routes.MapRoute(
       "Sections", // Route name 
       "Test/Index/{id}/{jobno}/{instid}", // URL with parameters 
       new { controller = "TestEdit", action = "Index", id = UrlParameter.Optional, jobno = UrlParameter.Optional, instid = UrlParameter.Optional } // Parameter defaults 
      ); 

      routes.MapRoute(
       "Pumps", // Route name 
       "Home/Main/{id}/{jobno}", // URL with parameters 
       new { controller = "Home", action = "Main", id = UrlParameter.Optional, jobno = UrlParameter.Optional } // Parameter defaults 
      ); 

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

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

     } 
+0

在Global.asax.cs中是否有與該路線匹配的路線? –

+0

你的行爲也會重定向到一個不存在的行爲。 –

+0

你能顯示你配置的路線嗎? – dom

回答

1

從您發佈的代碼中,

@using (Html.BeginForm("SaveEmailStatus", "Test", 
     new { instid = ViewContext.RouteData.Values["instid"], empid = "107" }, 
     FormMethod.Post)) 
輸出

<form method="post" action="/Test/SaveEmailStatus?instid=44&empid=107"> 

所以假設你已經張貼的路線是正確的,他們沒有將匹配除了最後一個(默認),其網址之一。該路線在RouteData中只有3個密鑰,controlleractionid

既然要發佈的形式,你可能並不需要在您的網址instidempid,而不只是發佈他們作爲隱藏的輸入與表單一起。

+0

我現在看到它。我假設路線信息將自動轉到該ActionResult。我需要一個匹配該模式的路線來獲取這些路線值。 – dotnetN00b

相關問題