Как передать значение bool внутри ActionLink (из view в controll)?

#c# #asp.net-mvc #boolean

#c# #asp.net-mvc #логическое

Вопрос:

Я должен передать bool внутри -> "@Html.ActionLink(" ", "Like", new { id = Model.Id @*, Pass bool value here *@}".

Мой метод, такой как signature, принимает a Guid Id и a bool в параметре.

Я попытался со следующим:

    bool passBool = true;
   @Html.ActionLink("Like!", "Like", new { id = Model.Id, passBool}
   @Html.ActionLink("Disike!", "Like", new { id = Model.Id, passBool = false}
  

Но я получаю его как null.

  public ActionResult Like(Guid id, bool? getBool) //gets null error without '?'
        {
            if (getBool == true){    

                return Content("Liked!");

            }else if (getBool == false){    

                return Content("Disiked!");
            }
  

Я также безуспешно пытался исправить это с помощью модели представления:

 var liked = new Test.ViewModel.LikeViewModel {LikeDislike = true};

 @Html.ActionLink("Like!", "Like", new { id = Model.Id, liked}
  

Но это не работает, поскольку эти значения bool по-прежнему равны нулю, когда я их передаю. Есть идеи, как передать значение bool из представления в контроллер?

Ответ №1:

Вам нужно назвать передаваемый параметр так, чтобы он соответствовал действию вашего контроллера:

 @Html.ActionLink("Like!", "Like", new { id = Model.Id,getBool= passBool}
  

Комментарии:

1. О, я забыл упомянуть, я не использую ViewModel внутри этого представления. Модель, которую я использую, не имеет свойства bool. Вот почему я попытался решить эту проблему, позаимствовав ViewModel через var liked = new Test.ViewModel.LikeViewModel {LikeDislike = true}; . Есть ли какой-нибудь способ обойти это?

2. Я смущен тем, что вы подразумеваете под заимствованным. Кроме того, я не рекомендую использовать HttpGet (что вы и делаете) для выполнения таких действий, как нравится / не нравится. Вы должны создать форму и опубликовать такое значение. В противном случае веб-сканер или автоматизированный инструмент могут перейти по вашей ссылке и «лайкать» вещи, не имея в виду.