Обработать клик по кнопке в ASP MVC

347
27 августа 2017, 02:06

Есть простейшее MVC приложение из кнопки <button> и текстового поля <text>. Как при клике на кнопку изменить текст в <text>? У меня вот такой контроллер :

    public class TableController : Controller
{
    [HttpGet]
     public ActionResult Index()
    {
        ViewBag.ListViewTable = ListButtonName.CollectionNames;
        ViewBag.ConcretString = "Empty";
        return View();
    }
    [HttpPost]
    public ActionResult GetName(object sender)
    {
        ViewBag.ConcretString = "!!!";
        return View();
    }
}

И сгенерированное View :

@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
    <div> 
        <table>
        @foreach (var item in ViewBag.ListViewTable)
        {
            <tr><td><button onclick="location.href='@Url.Action("GetName")'" id="@item">@item</button></td></tr>
        }
    </table>
</div>
<div>
    <text>@ViewBag.ConcretString</text>
</div>
</body>
</html>

В ответ возвращается ошибка :

Не удалось найти данный ресурс.

Запрошенный URL: /Table/GetName

Как правильно реализовать команду в MVC ?

Answer 1

Ошибка происходит из-за атрибута [HttpPost] на методе контроллера GetName, так как в результате присвоения location.href= ... выполняется GET запрос.

public class TableController : Controller
{
  [HttpGet]
  public ActionResult Index(string id)
  {
    ViewBag.ListViewTable = ListButtonName.CollectionNames;
    ViewBag.ConcretString = "Empty";
    if (!string.IsNullOrEmoty(id))
      ViewBag.ConcretString = "!!!" + id + "!!!";
    return View();
  }
}
@foreach (string item in ViewBag.ListViewTable)
{
  <tr><td>@Html.ActionLink(item, "Index", new { id = item })</td></tr>
}
READ ALSO
Отправить POST запрос с JSON телом C#

Отправить POST запрос с JSON телом C#

Как отправить запрос я разобрался (использую библиотеку xNet), а как изменить его тело нет, дайте пример с использованием xNet или стандартных...

794
Передать в делегат Func динамический тип

Передать в делегат Func динамический тип

В качестве аргумента у метода нужен делегат Func в котором первый параметр - Type не известен:

290
Получение guid из .asset файла

Получение guid из .asset файла

Имеется файл с расширениемasset

305
Можно ли запихнуть в ProgressBar.Step значение типа Double?

Можно ли запихнуть в ProgressBar.Step значение типа Double?

Можно ли запихнуть в ProgressBarStep значение типа Double

347