我想知道在单击按钮时是否可以在控制器中调用方法。
我有一个名为home
的视图,当加载视图时,它会调用控制器中的Index
操作方法。我有Button
(HTML或ASP.NET),名为LoadData
。当我单击按钮时,我需要在名为Home
的同一视图中加载一些数据。
我该怎么做?
答案 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>