【问题标题】:How to get a value from view to Controller via Formcollection MVC如何通过 Formcollection MVC 从视图获取值到控制器
【发布时间】:2023-03-03 18:29:02
【问题描述】:

我正在开发 MVC2 ASP 项目。 我遇到的问题是我的控制器没有捕捉到来自视图的值。 我使用 Formcollection 在我的视图中从 Textbox 中捕获值, 但是当我运行它时,Collection 一直显示 Null

这里是我的控制器

    [HttpPost]
    public ActionResult Insert(FormCollection collection)
    {

        ProductionOrderItem item = new ProductionOrderItem();

        item.ProductionOrderNo =collection["DetailsView1$txtName"];
        item.ProductionOrderNo = collection["DetailsView1$TexMainOrder"];
        item.OrderDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month,DateTime.Now.Day);

}

这是我的 ASPX 页面

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
         ClientIDMode="Static" DefaultMode="Insert" Height="50px" Width="125px" 
    EnableViewState="False">
        <Fields>
            <asp:TemplateField HeaderText="ProductionOrderNo">
                <InsertItemTemplate>
                    <asp:TextBox ID="txtName" runat="server" ></asp:TextBox>
                </InsertItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="MainOrder">
                <InsertItemTemplate>
                    <asp:TextBox ID="TexMainOrder" runat="server" ></asp:TextBox>
                </InsertItemTemplate>
            </asp:TemplateField>

【问题讨论】:

  • 如果这是 MVC,您不应该使用服务器控件。您是否检查了 html 中生成的文本框名称是否符合您的预期?
  • 不明白你的真正意思,

标签: c# asp.net-mvc asp.net-mvc-2 detailsview


【解决方案1】:

我认为在您的视图中使用 aspx 文本框控件不是一个好主意,我宁愿使用规则的 html 文本框

<InsertItemTemplate>
                 <input type="txtName" id="txtName" name="fname">
                </InsertItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="MainOrder">
                <InsertItemTemplate>
               <input type="TexMainOrder" id="TexMainOrder" name="fname">
                </InsertItemTemplate>


    item.ProductionOrderNo =collection["txtName"];
    item.ProductionOrderNo = collection["TexMainOrder"];

即使您决定使用它,您也应该添加名称并将其设为客户端 ID 模式静态

  <asp:TextBox ID="txtName" name="txtName" clientIdMode="static" runat="server" ></asp:TextBox>
 <asp:TextBox ID="TexMainOrder" name="TexMainOrder" ClientIdMode="static" runat="server" ></asp:TextBox>

【讨论】:

  • 当我查看 Locals 时仍然为 null
【解决方案2】:

在我看来,如果你想使用 FormCollection,你需要一个表单。我在你的标记中没有看到。

【讨论】:

  • 所有Detailsview都放在
    标签内
  • FormCollection 是否为空?或者你试图从中拉出的物品?换句话说,您是否在查看 'item.ProductionOrderNo' 并在分配 'collection["DetailsView1$TexMainOrder"];' 后发现它为空给它?或者您是在直接检查收藏吗?如果是第一个,试试第二个。可能是未按您预期命名的事物。
  • 是的,我在分配集合后查看“item.ProductionOrderNo”,它显示为空。
  • 我会设置一个 for/next 循环来仔细检查 FormCollection 中的所有项目,因为它可能会为您重新定义问题。
【解决方案3】:

我已经解决了。 我应该给出从哪里捕获数据的完整路径,

很喜欢

item.ProductionOrderNo =collection["textProductionOrderNo"];

我写了

 item.ProductionOrderNo = collection["ctl00$MainContent$DetailsView1$textProductionOrderNo"];

【讨论】:

  • 这是我建议你做的。您应该将此标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多