Вызовите метод из представления и получите его значение:

1

Я получил этот метод, который возвращает случайное слово из списка:

public string GetRandom()
{
    var firstNames = new List<string> {"Hund", "Katt", "Hus", "Bil"};

    Random randNum = new Random();
    int aRandomPos = randNum.Next(firstNames.Count);//Returns a nonnegative random number less than the specified maximum (firstNames.Count).

    string currName = firstNames[aRandomPos];

    return currName;
}

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

@Html.ActionLink("GetRandom","GetRandom")

Но как я могу позаботиться о его ценности и отобразить его в представлении?

  • 0
    Может быть, вы должны добавить больше тегов, чтобы отличить этот вопрос, например, asp.net-mvc.
Теги:
asp.net-mvc

2 ответа

2
Лучший ответ

Казалось бы, вам нужно будет использовать Javascript, чтобы создать эффект, который вы описываете в своем последнем комментарии.

  1. Alter ваш GetRandom метод возвращает JsonResult вместо string:

    public ActionResult GetRandom()
    { 
        var firstNames = new List<string> { "Hund", "Katt", "Hus", "Bil" };
        Random randNum = new Random();
        int aRandomPos = randNum.Next(firstNames.Count);
        string currName = firstNames[aRandomPos];
        return Json(currName, JsonRequestBehavior.AllowGet);
    }
    
  2. Используйте jQuery для извлечения данных и отображения их на этикетке асинхронно (без обновления страницы) при каждом нажатии кнопки:

    <p id="randomName">Random Swag</p>
    <button id="randomButton">Generate Name</button>
    
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script>
         $("#randomButton").click(function () {
             $.get('/Home/GetRandom', function (data) {
                 $("#randomName").text(data);
             });
         });
    </script>
    
  • 0
    Это было интересно, однако, он вызывает метод непосредственно под нагрузкой, я хотел бы контролировать вызов с помощью кнопки, если это возможно. Спасибо
  • 0
    Большое спасибо! Это сделал именно то, что я хотел!
0

Поместите свой метод в класс, полученный из контроллера.

ActionLink, первым параметром является имя действия, второй параметр - имя контроллера.

Вы хотите позвонить по этому пути.

@Html.ActionLink("GetRandom", "GetRandom")

Это то, что вам нужно.

public class GetRandomController : Controller
{
    public string GetRandom()
    {
        var firstNames = new List<string> { "Hund", "Katt", "Hus", "Bil" };

        Random randNum = new Random();
        int aRandomPos = randNum.Next(firstNames.Count);//Returns a nonnegative random number less than the specified maximum (firstNames.Count).

        string currName = firstNames[aRandomPos];

        return currName;
    }
}
  • 0
    Прямо сейчас метод находится в моем HomeController, который наследуется от контроллера. Должен ли я сделать новый контроллер, чтобы это работало?
  • 0
    @ user2915962, если вы поместите свой метод в HomeController, вы можете вызвать этот путь @Html.ActionLink("GetRandom", "Home") . Вы хотите создать отдельный контроллер или нет, это ваше дело ..
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню