【问题标题】:Pass input values from view(aspx) to controller将输入值从视图(aspx)传递到控制器
【发布时间】:2015-02-05 13:38:13
【问题描述】:

有人可以帮帮我吗?

我想将两个文本框的输入值传递给视图的控制器。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/personenbeheer.master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<UDL.Domain.Persoon>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="PersonenbeheerContent" runat="server">

    <legend class="form-signin-heading">Personenlijst</legend>
    <% Html.BeginForm("Index", "Persoon", FormMethod.Get);%>
    <% var currentUser = HttpContext.Current.User; %>
    <%  if (currentUser.IsInRole("Beheerder"))
        { %>

    <nav>
        <ul class="nav nav-pills nav-justified" role="tablist">
            <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;"><%: Html.ActionLink("Maak persoon aan", "Create", null, new { @class="UDLbutton" })%></li>
            <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;"><%: Html.ActionLink("Lijst Pdf", "PrintPersonen", new { sort = ViewData["sort"], zoeknaam = ViewData["zoekNaam"]}, new { target = "_blank",@class="UDLbutton"}) %></li>
            <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;">
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#etiketten"> Adres etiketten</button></li>
            <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;"><%: Html.ActionLink("Export emailadressen","ExportEmails", new { sort = "Adres", zoeknaam = ViewData["zoekNaam"]}, new { target = "_blank",@class="UDLbutton"}) %></li>
        </ul>
    </nav>
    <%  } %>


    <% Html.BeginForm("Index", "Persoon", FormMethod.Post);

       { %>

           <input type="text" id="txtA"/>

            <input type="text" id="txtB"/>

            <input type="submit" value="Verzenden"/>

     <%  } %>

如您所见,我对同一方法使用了两次 Html.BeginForm,但一次用于 GET,一次用于 POST。但是 POST 不起作用:(

这是控制器:

//
// GET: /Persoon/
[Authorize(Roles = "Gebruiker, Beheerder")]
public ActionResult Index(string sortOrder, string zoekNaam, int? page, string huidigefilter)
{
    //huidige zoekfilter
    ViewBag.huidigzoeken = sortOrder;
    //ViewBags om waarden door te geven naar de View en ze geven data over het sorteren door
    ViewBag.PersoonIDSortParm = String.IsNullOrEmpty(sortOrder) ? "PersoonID_desc" : "";
    ViewBag.NaamSortParm = sortOrder == "Naam" ? "Naam_desc" : "Naam";
    ViewBag.AanhefSortParm = sortOrder == "Aanhef" ? "Aanhef_desc" : "Aanhef";
    ViewBag.GemeenteSortParm = sortOrder == "Gemeente" ? "Gemeente_desc" : "Gemeente";
    ViewBag.GeslachtSortParm = sortOrder == "Geslacht" ? "Geslacht_desc" : "Geslacht";
    ViewBag.AdresSortParm = sortOrder == "Adres" ? "Adres_desc" : "Adres";
    ViewBag.VoornaamSortParm = sortOrder == "Voornaam" ? "Voornaam_desc" : "Voornaam";
    ViewBag.TelefoonSortParm = sortOrder == "Telefoon" ? "Telefoon_desc" : "Telefoon";
    ViewBag.GSMSortParm = sortOrder == "GSM" ? "GSM_desc" : "GSM";
    ViewBag.EmailSortParm = sortOrder == "Email" ? "Email_desc" : "Email";
    ViewBag.PartnerSortParm = sortOrder == "Partner" ? "Partner_desc" : "Partner";
    ViewBag.OpmerkingenSortParm = sortOrder == "Opmerkingen" ? "Opmerkingen_desc" : "Opmerkingen";
    //ViewBag.StatusLidSortParm = sortOrder == "StatusLid" ? "StatusLid_desc" : "StatusLid";
    ViewBag.huidigefilter = zoekNaam;

    ViewData["sort"] = sortOrder;
    ViewData["zoekNaam"] = zoekNaam;

    //Enkel de personen tonen die geen lid zijn
    var personen = PersoonBLL.SorteerZoeken(sortOrder, zoekNaam, page, huidigefilter);
    ViewData["PersonenCount"] = PersoonBLL.SorteerZoekenNotPaged(sortOrder, zoekNaam).ToList().Count;
    return View(personen);
}

[HttpPost]
public ActionResult Index(String a, String b)
{
    return View("Index");
}

我为 HttpPost 方法使用了一个断点,但它永远不会进入。

【问题讨论】:

    标签: c# asp.net-mvc view controller


    【解决方案1】:

    您需要设置每个input 元素的name 属性以匹配控制器方法中的参数名称。

    所以你应该有:

     <input type="text" id="txtA" name="txtA" />
     <input type="text" id="txtB" name="txtB" />
    

    在你的控制器中:

    public ActionResult Index(String txtA, String txtB)
    

    【讨论】:

    • 显然第一个 Html.BeginForm 没有关闭,因为当我在 Chrome 中检查我的页面时,POST 表单位于 GET 表单内...
    【解决方案2】:

    如果您希望页面中有两个表单,您必须通过以下方式结束表单:

      <%Html.EndForm(); %>
    

    所以现在我的代码如下所示:

        <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/personenbeheer.master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<UDL.Domain.Persoon>>" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="PersonenbeheerContent" runat="server">
    
        <legend class="form-signin-heading">Personenlijst</legend>
        <% Html.BeginForm("Index", "Persoon", FormMethod.Get);%>
        <% var currentUser = HttpContext.Current.User; %>
        <%  if (currentUser.IsInRole("Beheerder"))
            { %>
    
        <nav>
            <ul class="nav nav-pills nav-justified" role="tablist">
                <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;"><%: Html.ActionLink("Maak persoon aan", "Create", null, new { @class="UDLbutton" })%></li>
                <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;"><%: Html.ActionLink("Lijst Pdf", "PrintPersonen", new { sort = ViewData["sort"], zoeknaam = ViewData["zoekNaam"]}, new { target = "_blank",@class="UDLbutton"}) %></li>
                <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;">
    <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#etiketten"> Adres etiketten</button></li>
                <li role="presentation" class="alert-info" style="border: 2px solid white; border-radius: 5px;"><%: Html.ActionLink("Export emailadressen","ExportEmails", new { sort = "Adres", zoeknaam = ViewData["zoekNaam"]}, new { target = "_blank",@class="UDLbutton"}) %></li>
            </ul>
        </nav>
        <%  } %>
    
        <%Html.EndForm(); %>
    
     <% Html.BeginForm("Index", "Persoon", FormMethod.Post);
    
           { %>
    
               <input type="text" id="txtA" name="txtA"/>
    
                <input type="text" id="txtB" name="txtB"/>
    
        <input type="submit" value="Verzenden"/>
    
    
    
    
         <%  } %>
    
        <%Html.EndForm(); %>
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多