如何使用TryUpdateModel使用MasterPage在asp.net网站中选择表单值

时间:2017-01-18 03:03:38

标签: asp.net

最近我尝试使用TryUpdateModel来获取表单中控件的值,但问题是我在asp.net网站上使用MasterPage,我发现虽然我可以设置" ClinetIDMode& #34;静态以确保控件ID不会成为MainContent_USER_NAME。但我发现FormValueProvider与控件名称匹配而不是id,并且没有这样的" ClientNameMode"属性可以设置为静态,因此控件的名称只能是" ctl00 $ MainContent $ USER_NAME"。 如何解决这个问题?请帮帮我。我的aspx和cs文件:

Test.aspx文件:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
<div>    
    UserName:<asp:TextBox ID="USER_NAME" runat="server" ></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Add a user" OnClick="Button1_Click" />    
</div>
</asp:Content>

Test.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.ModelBinding;

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Entities db = new Entities();
        USER_INFO u = new USER_INFO();

        IValueProvider p = new FormValueProvider(ModelBindingExecutionContext);

        if (TryUpdateModel(u, p))
        {
            String name = u.USER_NAME;//can't pick the value
            db.USER_INFO.Add(u);
            db.SaveChanges();
        }
        else
        {
            //do nothing.
        }
    }
}

1 个答案:

答案 0 :(得分:0)

最后我找到了一个解决方案。我可以编写一些前端代码来设置name等于id

 <script>
     $("input[type=text]").each(function () {
         var id = $(this).attr("id");
         $(this).attr("name", id);
     });
 </script>

并且不要忘记将Page的ClientIDMode设置为Static

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" ClientIDMode="Static" %>