2010-08-18 88 views
3

根據我的同事的代碼,他是通過HTML屬性到他在使用BeginForm視圖形式申報和生成的HTML看起來像:如何從<form>標籤獲取價值?

<form action="/Reviewer/Complete" ipbID="16743" method="post"> 

我怎麼能在我的控制器代碼獲得ipbID?我想

HttpContext.Request.QueryString["ipbID"] 

......還有......

Request.Form["ipbID"] 

,我甚至已經進入了調試和通過的Request.Form我所能的每一個部分去看看是否值不知何故。在表單標籤中放置諸如此類的值不是一種好的做法嗎?任何和所有的幫助表示讚賞。謝謝。

更新: 我應該通知大家,這個表格正在應用於一個單元格。單元格在數據表中。當我使用它時,返回隱藏的第一個值,但是沒有後面的值。

更新2: 查看

<% Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<PTA.Models.IPB>>" %> 

<%@ Import Namespace="PTA.Helpers"%> 

<b>Assigned IPBs</b> 

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
    $('#sharedIPBGrid').dataTable(); 
    }); 
</script> 

<% 
if (Model != null && Model.Count() > 0) 
{ 
%> 
<table id="sharedIPBGrid" class="display"> 
    <thead> 
    <tr> 
     <th> 
     <%=Html.LabelFor(m => m.FirstOrDefault().IPBName) %> 
     </th> 
     <th> 
     <%=Html.LabelFor(m => m.FirstOrDefault().Status) %> 
     </th> 
     <th> 
     <%=Html.LabelFor(m => m.FirstOrDefault().PubDate) %> 
     </th> 
     <th> 
     <%=Html.LabelFor(m => m.FirstOrDefault().ChangeDate) %> 
     </th> 
     <th> 
     <%=Html.LabelFor(m => m.FirstOrDefault().Priority) %> 
     </th> 
     <th> 
     <%=Html.LabelFor(m => m.FirstOrDefault().Errors) %> 
     </th> 
     <th> 
     Start 
     </th> 
     <th> 
     Stop 
     </th> 
     <th> 
     Complete 
     </th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
<% 
    foreach(IPB ipb in Model) 
    { 
%> 
     //Ignoring everything except for the Complete button as there's a lot of logic in there. 
     <td> 
<% 
     if (ipb.StatusID == (int)PTA.Helpers.Constants.State.InWorkActive) 
     { 
      using (Html.BeginForm("Complete", "Reviewer", FormMethod.Post, new {ipbID = ipb.ID})) 
      { 
%> 
      <%=Html.Hidden("ipbID", ipb.ID)%> 
      <input type="submit" id="btnComplete" value="Complete" /> 
<% 
      } 
     } 
%> 
     </td> 
<% 
    } 
%> 
    </tr> 
    </tbody> 
</table> 
<% 
} 
else 
{ 
    Response.Write("No IPBs found!"); 
} 
%> 

回答

6

不做爲你的同事。 這是錯的form標籤上沒有定義ipbID屬性,這意味着您生產的HTML無效。此外,表單屬性不會發布到服務器,因此您無法獲取它們。

我會建議你使用一個更加自然的隱藏字段。因此,而不是:

<form action="/Reviewer/Complete" ipbID="16743" method="post"> 

嘗試:

<form action="/Reviewer/Complete" method="post"> 
    <input type="hidden" name="ipbID" value="16743" /> 

然後Request["ipbID"]或命名ipbID一個簡單的控制器動作參數會給你所需的值。

+0

查看我的更新。我嘗試了隱藏功能,但因爲我將表格封裝在表格的一個單元格中,並且需要特定行的ipbID,所以它不起作用。它返回第一個ipbID,但是如果我選擇第五行,則不是第五個ipbID。 – XstreamINsanity 2010-08-18 13:25:34

+3

'不要做你的同事。這是錯的,AMEN! – 2010-08-18 13:25:36

+0

然後,您需要編寫您的邏輯,以便將正確的ID放入隱藏輸入中(即與窗體所在行相關的那個)。 – Quentin 2010-08-18 13:27:08