Вызов метода действия при нажатии кнопки в ASP.NET MVC - PullRequest
1 голос
/ 22 декабря 2009

Я хочу знать, могу ли я вызывать метод в контроллере при нажатии кнопки.

У меня есть представление с именем home, и когда оно загружается, оно вызывает метод действия Index в контроллере. У меня есть Button (HTML или ASP.NET) с именем LoadData. Когда я нажимаю кнопку, мне нужно загрузить некоторые данные в том же виде, который называется Home.

Как мне это сделать?

Ответы [ 4 ]

1 голос
/ 23 декабря 2009

Для кнопок необходимо задействовать JQuery или JavaScript для вызова данных с сервера, если вы хотите сделать это в форме AJAX. Но в простейшем виде делаем:

<% Html.BeginForm("Action", "Controller"); %>

 <!--Form values in here-->

 <input type="submit" />

<% Html.EndForm(); %>

Будет вызывать ваш метод действия и вызывать обратную передачу. В System.Web.Mvc.Ajax имеется опция AJAX для использования AjaxForm с параметрами AJAX для выполнения асинхронной обратной передачи, и ее легко настроить. Вместо этого я склонен использовать JQuery лично.

НТН.

0 голосов
/ 23 декабря 2009

Вы должны написать свой контроллер следующим образом.

public class HomeController : Controller
{

    public ActionResult Index()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult FetchData()
    {
        return Content("Some data...");
    }

}

И назовите желаемое действие следующим образом.

<% using (Ajax.BeginForm("FetchData", new AjaxOptions() { UpdateTargetId = "ContentPlaceHolder", HttpMethod = "Post" }))
   { %>
<div id="ContentPlaceHolder"></div>
<input type="submit" value="Fetch Data" />
<% } %>

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
0 голосов
/ 22 декабря 2009

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

public ViewResult Empty()
    {
        var products = productsRepository.Products.Where(x => x.ProductID == -1);
        return View();
    }

и:

public ViewResult ListAll()
    {
        var products = productsRepository.Products;
        return View("Empty", products);
    }

и по вашему мнению Empty.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Entities.Product>>" %>

пустой

<h2>Empty</h2>

<table>
    <tr>
        <th></th>
        <th>
            ProductID
        </th>
        <th>
            Name
        </th>
        <th>
            Description
        </th>
        <th>
            Price
        </th>
        <th>
            Category
        </th>
        <th>
            ImageMimeType
        </th>
        <th>
            Error
        </th>
    </tr>

<% if (Model != null) 
   {
       foreach (var item in Model)
       { %>

    <tr>
        <td>
            <%= Html.ActionLink("Edit", "Edit", new { id = item.ProductID })%> |
            <%= Html.ActionLink("Details", "Details", new { id = item.ProductID })%>
        </td>
        <td>
            <%= Html.Encode(item.ProductID)%>
        </td>
        <td>
            <%= Html.Encode(item.Name)%>
        </td>
        <td>
            <%= Html.Encode(item.Description)%>
        </td>
        <td>
            <%= Html.Encode(String.Format("{0:F}", item.Price))%>
        </td>
        <td>
            <%= Html.Encode(item.Category)%>
        </td>
        <td>
            <%= Html.Encode(item.ImageMimeType)%>
        </td>
        <td>
            <%= Html.Encode(item.Error)%>
        </td>
    </tr>

<% }
   }%>

</table>

<p>
    <%= Html.ActionLink("List Products", "ListAll")%>

</p>

надеюсь, это поможет

0 голосов
/ 22 декабря 2009

Чтобы сделать это, используя простую публикацию, вам просто нужно опубликовать URL-адрес, по которому существует метод контроллера.

Например, следуя стандартной настройке маршрутов в вашем global.asax "{controller} / {action} / {id}"

Если у вас есть метод контроллера внутри вашего класса HomeController с именем «LoadData», тогда вы получите доступ к нему по URL:

/ Home / LoadData

Это URL, который вы вводите в атрибут action форм.

Вы также можете нажать этот URL-адрес с помощью запроса AJAX, чтобы загрузить данные на ту же страницу, на которой вы находитесь, без обратной передачи.

Используя jQuery, вы можете сделать что-то вроде:

$('#myForm').submit(function() {
                   $.post(
                            this.action,{params},
                            function(data){ // do something with return info }
                  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...