从单击ASP.NET MVC中的按钮调用操作方法

时间:2009-12-22 10:22:45

标签: c# .net asp.net-mvc button controller

我想知道在单击按钮时是否可以在控制器中调用方法。

我有一个名为home的视图,当加载视图时,它会调用控制器中的Index操作方法。我有Button(HTML或ASP.NET),名为LoadData。当我单击按钮时,我需要在名为Home的同一视图中加载一些数据。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

使用按钮时,如果要以AJAX形式进行操作,则必须使用JQuery或JavaScript来调用从服务器获取数据。但最简单的形式是:

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

 <!--Form values in here-->

 <input type="submit" />

<% Html.EndForm(); %>

将调用您的操作方法并调用回发。 System.Web.Mvc.Ajax中有一个AJAX选项,可以使用带有AJAX选项的AjaxForm来执行回发异步,并且它易于设置。我倾向于亲自使用JQuery。

HTH。

答案 1 :(得分:0)

要使用简单的帖子执行此操作,您只需要发布到存在控制器方法的URL。

例如,遵循global.asax中的标准路由设置“{controller} / {action} / {id}”

如果您的HomeController类中有一个名为“LoadData”的控制器方法,那么您可以通过URL访问它:

/主页/ LoadData

这是您在表单action属性中输入的网址。

您也可以使用AJAX请求点击此网址,以便将数据加载到您所在的同一页面而不进行任何回发。

使用jQuery,您可以执行以下操作:

$('#myForm').submit(function() {
                   $.post(
                            this.action,{params},
                            function(data){ // do something with return info }
                  }

答案 2 :(得分:0)

您定义两个操作一个用于显示空视图,另一个用于使用列表填充视图:

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>

希望这会有所帮助

答案 3 :(得分:0)

您需要按如下方式编写控制器。

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>