2013-02-19 3 views
1

Я пытаюсь получить условный клиентский шаблон для работы в сетке Kendo, который вызовет мой контроллер с простой строкой userName в качестве параметра, но я не могу понять синтаксис, чтобы получить эту работу правильно.Kendo UI Условная кнопка в ClientTemplate

Мой шаблон, на мой взгляд, как это:

 columns.Bound(user => user.IsLockedOut).ClientTemplate(
       "# if (IsLockedOut == true) { #" + 

        "<input type='button' value='Unlock Acc' onclick='location.href=" + @Url.Action("UnlockAccount", "Administration", new { userName = "#= UserName #" + }) + "/>" + 

       "# } else { #" + 
        "Unlocked" + 
       "# } #" 
      ); 

И метод действия контроллера выглядит следующим образом:

public void UnlockAccount(string userName) 
    { 
    } 

На данный момент ошибка Вырабатываемые:

CS1525 : Недопустимый термин выражения '}'

Я смотрел на это пару часов и теперь я не вижу дерева для деревьев.

ответ

2

У вас есть символ «+» плюс, который вам действительно не нужен. Также вам не нужен знак «at» @ перед помощником.

new { userName = "#= UserName #" + }) //<- that last plus 
+0

Спасибо за информацию, обновили код в исходном вопросе. –

0

Я должен немного дальше, но только вручную писать URL, как это:

"<input type='button' value='Unlock Acc' onclick='location.href=/Administration/TryUnlockAccount?userName=#= UserName #'/>" 

Тем не менее не вызывает мой метод контроллера, но, хотя он имеет правильное значение параметра .. .

+0

Я, кажется, тоже получаю ошибки Modernizer. SyntaxError: недопустимый флаг регулярного выражения T http: // localhost: 18086/Scripts/modernizr-2.5.3.js Строка 433 – Jammer

1

Этот метод работал для меня.

const string ShowUpdateButton = "#if (IsNetReversal == false) {#<a class='k-button k-button-icontext k-grid-edit' href='\\#'><span class='k-icon k-edit'></span>Update</a>#}#"; 
const string ShowReverseButton = "#if (IsNetReversal == false) {#<a class='k-button k-button-icontext k-grid-reverse' href='/JournalDetail/Reverse/#: ID #' ><span class='k-icon k-reverse'></span>Reverse</a>#}#"; 
const string ShowDeleteButton = "#if (IsAdjustment == true) {#<a class='k-button k-button-icontext k-grid-delete' href='\\#'><span class='k-icon k-delete'></span>Delete</a>#}#"; 

Вы можете сделать шаблон инлайн, но я считаю, что проще (особенно для нескольких кнопок), если объявить константы, а затем использовать string.format, чтобы объединить их.

col.Template(o => o).ClientTemplate(string.Format("{0}{1}{2}", ShowUpdateButton, ShowDeleteButton, ShowReverseButton)); 

Достоинства является то, что будет работать с всплывающим редактором в то время как JQuery писака будет игнорировать условное состояние, когда пользователь отменяет из редактирования. Отмена из всплывающего редактора приведет к восстановлению строки сетки из режима просмотра или везде, где Kendo хранит ее, что приводит к состояниям кнопок до любого jquery/javascript hack. Вышеуказанный метод также автоматически выполнит стандартные команды, так как я скопировал их вывод HTML для шаблона клиента.

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

Замечание к форуму Kendo: По состоянию на дату публикации, они не позволяют людям, которые не платят за поддержку для публикации на форумах, поэтому я бы предложил здесь задать вопросы. Они контролируют Stack Overflow, и по моему опыту они, похоже, быстрее отвечают на вопросы.

Смежные вопросы