2017-01-18 4 views
0

auszuwählen Kürzlich habe ich versucht, das TryUpdateModel verwenden, um den Wert des Steuerelements in einem Formular zu erhalten, aber das Problem ist, dass ich die MasterPage in meinem asp.net verwenden Ich habe festgestellt, dass ich zwar "ClinetIDMode" auf "Static" setzen kann, um sicherzustellen, dass die Steuerelement-ID nicht zu "MainContent_USER_NAME" wird. Aber FormValueProvider stimmt mit dem Steuerelementnamen und nicht mit der ID überein, und ein solches "ClientNameMode" -Attribut kann nicht vorhanden sein auf "Static" gesetzt sein, so dass der Name des Steuerelements nur etwas wie "ctl00 $ MainContent $ USER_NAME" sein kann. ? Wie dieses Problem lösen Bitte helfen me.and meine aspx und cs-Datei:Wie TryUpdateModel verwenden, um Formularwerte in asp.net-Website mit MasterPage

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

Was ist, wenn Sie den Namen = "USER_NAME" für Ihr Textfeld festlegen? –

+0

Ja, ich habe das versucht. Die name -Eigenschaft des Eingabesteuerelements ist immer noch etwas wie ctl00 $ MainContent $ USER_NAME .. –

Antwort

0

Schließlich fand ich eine Lösung.Ich kann einen kleinen Front-End-Code schreiben, um name gleich id zu setzen.

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

Und vergessen Sie nicht ClientIDMode-Static Seite des einzustellen.

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