不知道Request对象的来源

时间:2014-01-16 23:56:45

标签: javascript jquery asp.net-mvc forms httprequest

所以我的控制器中有这个方法

[HttpPost]
public ActionResult Summary(string id, Summary model)
{
  int projectID;
  if (Int32.TryParse(id, out projectID))
  {
   switch (Request["PageType"])
   {
      case "Results":
       model = new Summary(SummaryType.SCS, GetSCSData(projectID, Request["Names"], true), projectID, SCSView.ResultsPage);
       break;
      case "Recipients":
       model = new Summary(SummaryType.SCS, GetProjectData(projectID, Request["Names"]), projectID)
       {
          Names = Request["Names"],
          HTMLAttachment = ParseBool(Request["HTMLAttachment"])
        };
        break;                    
       default:
        model = new Summary();
         break;
        }
    }

想知道Request["Names"]来自哪里。我理解这是来自我的Http请求调用的请求对象。但它是如何构建和发送的?我知道这与我的观点有关,看起来像这样

 using (Html.BeginForm(Summary, "Mycontroller", FormMethod.Post, new { id = "gridForm" }))
  { 
    @(Html.Kendo().Grid(Model.scsGridList) ... kendo stuff
    <input id="gridPage" name="PageType" type="hidden" value="" />
    <input id="gridProjectID" name="ProjectID" type="hidden" value="@Model.ProjectID" />
    <input id="gridJobs" name="Jobs" type="hidden" value="" />
    <input id="gridHTMLAttach" name="HTMLAttachment" type="hidden" value="true" />
  <div style="width: 100%; padding-top:5px;">                           
    <a id="email" href="#"><span class="ui-icon ui-icon-mail-closed linkicon"></span>Email</a>                            
  </div>

在我的javascript中就是这个

$("#email").on("click", function (e) {
        SendTo("Recipients");
    });

function SendTo(pageType){
    var values = GetSelectedValues();
    if(values){
        $("#gridPage").val(pageType);
        $("#gridJobs").val(values);
        $("#gridForm").submit();
    } else {
        $("#gridMessage").html("Please select a job.");
    }
}

我只是对如何使用Request["HTMLAttachment"]Request["Names"]等数据填充Request对象感到困惑。是否知道要映射到模型?我有道理吗?

1 个答案:

答案 0 :(得分:0)

因为您将所有输入放在表单中,所以当您提交它时,浏览器将填充键值对,其中键是表单内的inpurs的名称。它将为表单中的每个输入元素执行操作,甚至是不可见的。 正如它在此处所述:http://msdn.microsoft.com/en-us/library/ms524948(v=vs.90).aspx

  

Request对象检索客户端浏览器传递的值   在HTTP请求期间到服务器。

这是由asp.net免费提供给您的。 asp.net mvc使用它。 http://stephenwalther.com/archive/2008/03/18/asp-net-mvc-in-depth-the-life-of-an-asp-net-mvc-request