如何通过Formcollection MVC从视图到Controller获取值

时间:2013-05-07 16:40:23

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

我正在研究MVC2 ASP项目。 我得到的问题是我的cotroller没有捕获来自视图的值。 我使用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>

3 个答案:

答案 0 :(得分:0)

我认为在您的视图中使用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>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我修好了。 我应该给出从中捕获数据的完整路径,

如此绝对

item.ProductionOrderNo =collection["textProductionOrderNo"];
我写了

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