2015-01-25 3 views
0

У меня есть WebGrid, который построен с использованием модели я построить его, используя код ниже:WebGrid ActionLink как получить объект строки

Просмотр

@model IEnumerable<ExampleMVC4.Models.LicenseInfo> 
@{ 
    ViewBag.Title = "Licenses"; 
    WebGrid grid = new WebGrid(Model);  
} 
<h2>Licenses</h2> 
@grid.GetHtml(tableStyle: "table table-striped table-hover", 
    columns: new[] { 
    grid.Column("SerialNumber"),         
    grid.Column("Name"), 
    grid.Column("Organization"), 
    grid.Column("Email"), 
    grid.Column("DateActivated"), 
    grid.Column(header: "IsValid", format: item=>new HtmlString(Html.ActionLink((string)item.IsValid.ToString(), "Deactivate", new { @id = item.SerialNumber}).ToString())) 
    }) 
    <p>@ViewBag.Message</p> 

управления

public ActionResult Index() 
{ 
    var data = getLicenseInfoList(); 
    return View(data); 
} 

[HttpPost] 
public ActionResult Deactivate(string serialNum_) 
{ 
    if (serialNum_ != null) 
    { 
     ViewBag.Message = serialNum_; 
    } 
    return View(); 
} 

Но я не могу попросите его позвонить по телефону Deactivate() с серийным номером.

Что такое правильный способ обработки ActionLink щелчок внутри WebGrid?

ответ

0

Ваш ActionLink генерирует параметр маршрута с именем id (... new { @id = item.SerialNumber} .. но методы имя параметра serialNum_. Измените подпись методы для

[HttpGet] 
public ActionResult Deactivate(string id) 

Отметим также свою ссылку так сво GET, а не POST (хотя его непонятно, что делает метод)

+0

Я хотел бы получить серийный номер в этом методе и изменить IsActive на true/false, а затем перезагрузить одну и ту же сетку. Сейчас я получаю сообщение об ошибке, которое может найти вид. – Farukh

+0

Является ли метод контроллера теперь вызываемый и является параметром 'id', серийный номер, который вы ожидаете (т. это отвечает на ваш первоначальный вопрос?). –

+0

Обратите внимание, что неясно, что вы пытаетесь сделать - все, что вы вызываете, - это «return View();», который возвратит представление с именем 'Deactivate', которое, как я подозреваю, не создано, и, вероятно, это не то, что вы хотите вернуть. Вам будет намного лучше использовать jquery/ajax для публикации серийного номера, обновления базы данных, возврата Json, указывающего успех (и обновления DOM - например, изменить текст ссылки из «Деактивировать» на «Активировать»), но это вопрос другого вопроса. –