最近我尝试使用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.
}
}
}
答案 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" %>