Jquery - передать аргумент команды кнопки asp с помощью jquery.

У меня есть кнопка asp:

<asp:button ID="btn1" runat="server" CommandArgument="" CssClass="btn1" OnClick="button_click"></asp:button>

и скрипт:

$("a").click(function () {
            var val = $(this).attr('id').toString();                            
            $('.btn1').attr('CommandArgument',val);
            alert($('.btn1').attr('CommandArgument').toString());
            $('.btn1').click();
        });

после щелчка он сообщает мне аргумент команды. Но на следующем шаге - когда я запускаю btn1 click с помощью jquery, он переходит к codebehind, а аргумент команды пуст. Могу ли я передать аргумент команды с помощью jquery?

Я пытался сохранить значение в глобальных переменных, но после обратной передачи все они пусты. И я не хочу использовать куки или viewstate для этого.

Спасибо!

5 ответов

Решение

CommandArgument является полностью серверным свойством и не отображает html-атрибут. Таким образом, вы не можете изменить атрибут любой кнопки и нажать на нее. Хорошей новостью является то, что вы можете запустить обратную передачу с помощью функции __doPostBack на стороне клиента и передать свое пользовательское значение в качестве второго параметра:

<script type="text/javascript">
    $("a").click(function () {
        var val = $(this).attr('id').toString();
        __doPostBack("<%= btn1.UniqueID %>", val);
    });
</script>

И вы можете получить переданный аргумент в обработчике кликов на сервере из коллекции Request.Form:

protected void button_click(object sender, EventArgs e)
{
    var argument = Request.Form["__EVENTARGUMENT"];
}

Если приведенный выше скрипт не будет работать, то, возможно, функция __doPostBack не определена на странице. В этом случае добавьте этот код в метод Page_PreRender: ClientScript.GetPostBackEventReference(btn1, string.Empty); это заставит страницу определить __doPostBack метод на странице.

Я обнаружил, что использование __doPostBack('id','args') создает обратную передачу всей страницы при нажатии кнопки отправки. Я считаю, что проще добавить скрытое поле на странице, установить значение, а затем вызвать событие button.click()

    <asp:Button ID="btnTrigger" runat="server" ClientIDMode="Static" OnClick="btnTrigger_Click" />
    <asp:HiddenField ID="CommandArg" runat="server" ClientIDMode="Static" />


    $('#CommandArg').val('my argument');
    $('#btnTrigger').click();

Или вы можете попробовать это:

<script type="text/javascript">
    function MaybeThisWorks(obj)
    {
        __doPostBack( obj.id, 'OtherInformation' );
        return true;
    }
</script>

...

<asp:Button Text="ButtonValue" ID="RepP1" runat="server" OnClientClick="MaybeThisWorks(this);" OnClick="CodeBehindFunction" />

"Другая информация" может быть заменена любой строкой или переменной.
например
$('# Календарь'). FullCalendar('GetDate'). GetMonth()+' '+$('# календарь '). FullCalendar(' GetDate'). GetFullYear ()

CodeBehindFunction - это функция кода, которая выполняется на сервере при нажатии кнопки (например, кнопка, которая печатает отчет и нуждается в значениях jquery в функции codebehind).
В функции codebehind вы можете получить аргументы с помощью Request.Form["__EVENTARGUMENT"]

protected void CodeBehindFunction(object sender, EventArgs e)
{
 string arguments = Request.Form["__EVENTARGUMENT"];
 ...
}

Попробуй это. Это сработало для меня.

// JQuery на стороне клиента:

$('#btnTrigger').val('MyParameter');
$('#btnTrigger').click();

// Метод щелчка на стороне сервера

String Param = Request.Form(btnTrigger.UniqueID)

Я обычно просто добавляю атрибут к кнопке в коде, а затем обращаюсь к нему через DOM в Javascript или jQuery.

 mybutton.Attributes.Add("MyVar", "MyValue");

Это будет отображаться на странице, и вы можете получить доступ к значению, используя Javascript.

Другие вопросы по тегам