Diskuze: spajanie prvkov
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 19 zpráv z 19.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
command.Parameters.Add(new SqlParameter("sloupec", hodnota));
Ďakujem, len ten insert command mám v súbore názov.aspx a tú druhú časť kódu v názov.aspx.cs
zabudol som dodať že sa jedná o asp.net webforms
Ve webformech jsem nikde nedělal, ale řekl bych, že ty třídy jsou partiální, takže se klasický spojí do jednoho, takže ten insertcommand půjde nějakým způsobem pojmenovat a ty parametry si tam pak můžeš v code-behindu přidat. Kdybys na to nepřišel, tak snad ti někdo pomůže.
Vygenerovaný insert si určitě sám udělal i parametry.
Udělej si HiddenField ve Formu a dej mu hodnotu toho UserId
<asp:HiddenField ID="HF_UserId" runat="server" Value='<%# Bind("AutorId") %>' />
a v souboru nazov.aspx.cs mu přidělíš hodnotu, kterou si kódem zjistíš...
(FormView1.FindControl("HF_UserId") as HiddenField).Value = userid;
Snad jsem to napsal dost srozumitelně...
Ahoj, zrejme som zle pochopil tvoj príspevok, vyhadzuje mi nasledujúcu chybu
Object reference not set to an instance of an object.
Line 20: (FormView1.FindControl("HF_UserId") as HiddenField).Value = userId;
takto vyzera kód v nazov.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
System.Web.Security.MembershipUser myObject = Membership.GetUser();
string userId = myObject.ProviderUserKey.ToString();
(FormView1.FindControl("HF_UserId") as HiddenField).Value = userId;
}
a takto v nazov.aspx
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Login1ConnectionString %>" InsertCommand="INSERT INTO [Entries] ([AutorId], [Date], [Text], [Title]) VALUES (@AutorId, @Date, @Text, @Title)" >
<InsertParameters>
<asp:Parameter Name="AutorId" Type="String" />
<asp:Parameter Name="Date" Type="DateTime" />
<asp:Parameter Name="Text" Type="String" />
<asp:Parameter Name="Title" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
<asp:FormView ID="FormView1" runat="server" DataKeyNames="ID_e" DataSourceID="SqlDataSource1">
<InsertItemTemplate>
<asp:HiddenField ID="HF_UserId" runat="server" Value='<%# Bind("AutorId") %>' />
<asp:TextBox ID="TextTextBox" runat="server" Text='<%# Bind("Text") %>' />
<br />
Title:
<asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' />
<br />
</InsertItemTemplate>
</asp:FormView>
podľa chyby ktorú mi vyhadzuje by som povedal že asi nevie nájsť ten hiddenfield v tom formview1
Spíš bych zkusil dá to userid na začátek, ještě před page load
public string userid;
pak v page_load do něj přiřadit hodnotu a pak tu hodnotu teprve dát do toho hiddenfield
protože takhle, jak to máš, se o tom userId ví jen v události Page_Load a při ukládání FormView1 už neví, co je userId...
no je to bez zmeny, stále to vyhadzuje tú chybu
p.s. som zabudol dať v predoslom príspevku este na koniec
inseritemtemplate
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Insert" />
<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
no ak to spravne chápem takto to má byť? Lebo takto to nefunguje;(
public string userid;
protected void Page_Load(object sender, EventArgs e)
{
System.Web.Security.MembershipUser myObject = Membership.GetUser();
userid = myObject.ProviderUserKey.ToString();
(FormView1.FindControl("HF_UserId") as HiddenField).Value = userid;
}
V podstatě by to takto mělo být. Já používám pro přihlašování uživatelů ASP.NET Identity, pak je userId takto
userid = Context.User.Identity.GetUserId();
Zkoušel sis někam vypsat, co ti to tvoje userId ukazuje za hodnotu? Mě to totiž připadá, že je to prázdné...
aj ja som si myslel či nieje null ale bez problémov ho vie nastaviť ako
text pre lable, dokonca som mu skúsil hodiť natvrdo Idčko jedného
používateľa v tom súbore nazov.aspx.cs a nefungovalo to
funguje to len keď natvrdo v nazov.aspx zadám v insert parameters default
value = idčko, ale to je mi takmer zbytočné
Ten Label byl součástí toho FormView1? A jako text do textboxu ti to taky jde? Pokud ano, tak to zkus uložit s tím, že "nabinduješ" ten parametr do toho textboxu...
Ještě mě napadlo, ten datum ukládáš jak, resp. z čeho?
Nie ten label je mimo formview, ale keď si to napísal skúsil som ho hodiť teda do insertitemtemplate a pristupovať k nemu z nazov.aspx.cs takto
(FormView1.FindControl("Label1") as Label).Text= userid;
a skončilo to rovnako
Object reference not set to an instance of an object.
neviem prísť na to v čom je chyba
Dátum nevypĺňam, sql tabulka ma default value GATEDATE()
Pokud máš Getdate(), nemšl bys ho mít v tom instertu...
vypiš mi, jeké máš v té stránce .cs usingy, píše ti to něco o
referencích
já mám toto
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Identity;
using System.Configuration;
using System.Data.SqlClient;
a funguje to...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration; //tento som si doplnil z tvojich usingov
using System.Data.SqlClient; //tento som si doplnil z tvojich usingov
public partial class Default2 : System.Web.UI.Page
{
public string userid;
protected void Page_Load(object sender, EventArgs e)
{
System.Web.Security.MembershipUser myObject = Membership.GetUser();
userid = myObject.ProviderUserKey.ToString();
// (FormView1.FindControl("Label1") as Label).Text= userid;
(FormView1.FindControl("HF_UserId") as HiddenField).Value = userid;
}
}
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Login1ConnectionString %>"
InsertCommand="INSERT INTO [Entries] ([AutorId], [Text], [Title]) VALUES (@AutorId, @Text, @Title)" >
<InsertParameters>
<asp:Parameter Name="AutorId" Type="String" />
<asp:Parameter Name="Text" Type="String" />
<asp:Parameter Name="Title" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
<asp:FormView ID="FormView1" runat="server" DataKeyNames="ID_e" DataSourceID="SqlDataSource1">
<InsertItemTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:HiddenField ID="HF_UserId" runat="server" Value='<%# Bind("AutorId") %>' />
<asp:TextBox ID="TextTextBox" runat="server" Text='<%# Bind("Text") %>' />
<br />
Title:
<asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Insert" />
<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
</asp:FormView>
</asp:Content>
Chyb v tom nevidím, ale už jsem řešil podobný problém a vyřešil jsem
ho spácháním nové stránky...
ten using
using System.Data.SqlClient;
je tam, když potřebuješ do DB přistupovat z kódu.
Zobrazeno 19 zpráv z 19.