Как получить значение из тега <form>? - PullRequest
3 голосов
/ 18 августа 2010

Основываясь на коде моего коллеги, он передает атрибуты HTML в объявление своей формы в представлении, используя BeginForm, и полученный HTML выглядит следующим образом:

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

Как я могу получить ipbID в моем контроллерекод?Я пробовал

HttpContext.Request.QueryString["ipbID"]

... и ...

Request.Form["ipbID"]

, и я даже прошел отладку и просмотрел все части Request.Form, которые я мог видетьесли значение было там как-то.Разве не стоит помещать такие значения в тег формы?Любая помощь приветствуется.Спасибо.

ОБНОВЛЕНИЕ: Я должен сообщить вам всем, что эта форма применяется к ячейке.Ячейки находятся в dataTable.Когда я использую, он возвращает первое значение, которое было скрыто, но ни одно из последующих.

ОБНОВЛЕНИЕ 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!");
}
%>

1 Ответ

6 голосов
/ 18 августа 2010

Не делай как твой коллега. Это неправильно .В теге 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 даст вам необходимое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...