sql c # удалить синтаксис для div id - PullRequest
0 голосов
/ 30 марта 2011

Эй, ребята, у меня есть кнопка удаления, связанная с некоторым Javascript следующим образом:

    <script type="text/javascript">
    function confirm_delete()
{
  if (confirm("Are you sure you want to delete this comment?")==true)
    return true;
  else
    return false;
}
</script>
<p>
<asp:Button ID="btn" OnClientClick="if(confirm_delete()){/* post back*/}else{return false;};" OnClick="btnDelete_Click" runat="server" Text="delete"/>

В следующем коде у меня есть это:

      using (OdbcCommand cmd = new OdbcCommand("SELECT idWallPosting, wp.WallPostings, p.PicturePath FROM WallPosting wp LEFT JOIN User u ON u.UserID = wp.UserID LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE wp.UserID=" + userId + " ORDER BY idWallPosting DESC", cn))
            {
                using (OdbcDataReader reader = cmd.ExecuteReader())
                {
                    test1.Controls.Clear();

                    while (reader.Read())
                    {

                        System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
                        div.Attributes["class"] = "test";


                        div.ID = String.Format("{0}", reader.GetString(0));
                        // the Div ID is set to my idWallPosting in my WallPosting Table
                        Image img = new Image();
                        img.ImageUrl = String.Format("{0}", reader.GetString(2));

                        img.AlternateText = "Test image";

                        div.Controls.Add(img);
                        div.Controls.Add(ParseControl(String.Format("&nbsp&nbsp&nbsp;" + "{0}", reader.GetString(1))));
                        div.Attributes.Add("onclick", "return confirm_delete();");

                        div.Style["clear"] = "both";
                        test1.Controls.Add(div);

                    }
                }
            }
        }
    }


protected void btnDelete_Click(object sender, EventArgs e)
{

    //serverside code if confirm was pressed to delete from WallPosting table based on Div ID.

}

Первая часть кода позадиdynamicicallys добавляет divs и добавляет id = к idWallPosting. Я подумал, что мне следует это сделать, поэтому, когда дело дошло до их удаления, все, что мне нужно было сделать, это указать ссылку на div.ID, но я не уверен, как добавить строку для преобразования идентификатора div встрока, чтобы я мог передать это в мой синтаксис sql?

Это должно быть взято со стороны html, а не со стороны сервера, вывод которого выглядит следующим образом, когда div загружаются при выполнении:

(firebug)

<div id="ctl00_ContentPlaceHolder1_ContentPlaceHolder2_26"><div>

Как бы я удалил заполнитель содержимого ct100 и т. д., чтобы получить самый конечный номер (26) и поместить его в кнопку удаления в виде строки?

РЕДАКТИРОВАТЬ: (Патрик)

protected void btnDelete_Click(object sender, EventArgs e)
{
    idWallPosting = Div.ID;

    //serverside code if confirm was pressed.
        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("DELETE FROM WallPosting WHERE idWallPosting = "+idWallPosting+")", cn))
            {
                cmd.ExecuteNonQuery();
            }
        }
        PopulateWallPosts(); //error here

}

Редактировать:

protected void btnDelete_Click(object sender, EventArgs e)
{

    string id = "ctl00_ContentPlaceHolder1_ContentPlaceHolder2_26";
    string[] idFragments = id.Split('_');
    id = idFragments[idFragments.Length - 1];

    //serverside code if confirm was pressed.
        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("DELETE FROM WallPosting WHERE idWallPosting = " + id + ")", cn))
            {
                cmd.ExecuteNonQuery();
            }
        }
        //PopulateWallPosts();

}

Ничего не делает.

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

То есть, когда нажата кнопка div, вы хотите удалить или хотите удалить только после нажатия кнопки?

Если это просто нажатие кнопки, вы можете использовать CommandArgument для передачи своего идентификатора.

Если это div-клик, то вам снова нужно передать идентификатор в подтверждение_дети, чтобы получить ссылку.

Редактировать: 1

Глядя на свойКод и комментарии Нет другого способа, кроме как сделать ajax postback , потому что нажатие на div не будет вызывать обратную передачу по умолчанию, как кнопка asp.net.И вы хотите выполнить событие Button_Click для div-клика, что тоже неправильно.

Хотя я не вижу хорошей идеи удалять все элементы div.Это будет очень раздражать, если пользователь случайно нажмет на div и появится сообщение.

Редактировать 2:

Вот пример, если это поможет:

<div id="testdiv" runat="server">Hello world</div>

//Pass record id to your confirm_delete
int id = 10;
testdiv.Attributes.Add("onclick", "return confirm_delete(" + id.ToString() + ");");

//Updated confirm_delete function

<script type="text/javascript">
        function confirm_delete(id){
            if (confirm('Are you sure you want to delete?')) {
                __doPostBack('DivClicked', id);
            }
            else {
                return false;
            }
        }
</script>


//This goes in your Page_Load code-behind
            if (Page.IsPostBack)
            {
                //It is a postback so check if it was by div click
                string target = Request["__EVENTTARGET"];
                if (target == "DivClicked")
                {
                    string id = Request["__EVENTARGUMENT"];
                    //Call you delete function passing record id
                    Response.Write(id.ToString());
                }
            }
2 голосов
/ 30 марта 2011

Если вы отправляете div обратно на серверную часть в качестве элемента управления ... это то, на что, похоже, вы пытаетесь сделать (простите, если я ошибаюсь)

Похоже, вы настраиваете div, чтобы при нажатии на них ... он запрашивал подтверждение перед удалением?

так что каждый раз, когда вы нажимаете на div, вы ожидаете сообщение назад?

Просто, чтобы бросить это там ... но вам было бы намного лучше использовать jquery и делать вызов ajax.

Обновление

Вы могли бы использовать скрытый контроль ...

<input id="tsIdValue" type="hidden" runat="server" />

затем на стороне сервера вы можете получить значение из скрытого элемента управления, используя

tsId = tsIdValue.value;

Когда вы создаете свой div и вызываете метод verify_delete, вы можете сделать:

div.Attributes.Add("onclick", "return confirm_delete(this.id);"); 

Когда вы нажимаете на div ... вы хотите установить значение скрытого элемента управления для идентификатора div с помощью javascript.

 function confirm_delete(id)

    {
      if (confirm("Are you sure you want to delete this comment?")==true)
        tsIdValue.value = id;
        return true;
      else
        return false;
    }

Вы все равно должны иметь javascript, чтобы вернуть сообщение с помощью __doPostBack() call

1 голос
/ 30 марта 2011

В ASP.Net (до .net 4.0) он автоматически добавляет некоторые элементы в начало идентификатора, чтобы гарантировать его уникальность. Короче говоря, вы не сможете полностью избавиться от этого, но вы можете выделить соответствующую часть своего Id для использования в вашем sql-запросе. Я бы сделал это так:

 //Note this is just for demonstration purposes you will need to actually get the Id of 
 //Id the control here
 string id = "ctl00_ContentPlaceHolder1_ContentPlaceHolder2_26";
 string[] idFragments = id.Split('_');
 id = idFragments[idFragments.Length - 1];

Это разделяет строку Id на символ подчеркивания, а затем возвращает последний элемент в результирующем массиве. Затем вы можете использовать это в вашем sql запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...