我想知道是否可以在单击按钮时调用控制器中的方法。从ASP.NET MVC中单击按钮调用操作方法
我有一个叫做home
的视图,当视图加载时,它调用控制器中的Index
动作方法。我有一个名为LoadData
的Button
(HTML或ASP.NET)。当我点击按钮时,我需要在同一个视图中加载一些数据,称为Home
。
我如何做到这一点?
我想知道是否可以在单击按钮时调用控制器中的方法。从ASP.NET MVC中单击按钮调用操作方法
我有一个叫做home
的视图,当视图加载时,它调用控制器中的Index
动作方法。我有一个名为LoadData
的Button
(HTML或ASP.NET)。当我点击按钮时,我需要在同一个视图中加载一些数据,称为Home
。
我如何做到这一点?
的按钮,它涉及JQuery的或JavaScript来拨打电话,以获得从数据服务器,如果你想以AJAX的形式做到这一点。但最简单的形式是:
<% Html.BeginForm("Action", "Controller"); %>
<!--Form values in here-->
<input type="submit" />
<% Html.EndForm(); %>
将调用您的操作方法并调用回发。 System.Web.Mvc.Ajax中有一个AJAX选项,可以使用带有AJAX选项的AjaxForm进行回发异步,并且它很容易设置。我倾向于亲自使用JQuery。
HTH。
要做到这一点使用一个简单的职位,你只需要张贴到控制器方法存在的URL。
例如,按照您的Global.asax标准的路线设置“{控制器}/{行动}/{ID}”
如果您有名为“LoadData”,那么你的HomeController类中的控制器方法“d访问它的URL:
/主页/ LoadData
这是你进入你的形式action
属性的URL。
您也可以使用AJAX请求点击此URL,以便将数据加载到您正在使用的同一页面而无需任何回发。
使用jQuery,你可以这样做:
$('#myForm').submit(function() {
$.post(
this.action,{params},
function(data){ // do something with return info }
}
是的,我知道我可以使用jQuery来完成,但首先我试图使用asp.net,然后转移到jQuery。 – superachu 2009-12-22 12:22:58
定义两个动作一个用于显示空视图和一个用于与列表填充视图:
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>
希望这有助于
这是如何工作的?就像点击“ListAll”链接时,“ListAll”方法触发或什么?什么是“ViewResult”类是什么意思? – superachu 2009-12-22 12:22:12
yes当ListAll链接被点击时,调用ListAll方法。 行为方法可能返回其中一个的结果是View的ViewResult返回一个视图Empty.aspx与产品列表ViewModel视图。作为它的节目,你是MVC的新手,所以我建议你看一下http://www.asp.net/MVC,你会发现很棒的视频和教程,你可以在ASP.NET MVC论坛(http ://forums.asp.net/1146.aspx)如果我的程序不够好,可以得到正确的答案。 希望这有助于。 – ali62b 2009-12-23 07:00:20
你必须编写你的控制器如下。
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>
@engineerachu我编辑了不正确的术语。使用ASP.NET MVC,不要使用ASP.NET控件*按钮或其他*。这不是ASP.NET - Home.aspx不是一个页面 - 它是一个视图。它实际上并不对应于物理页面。这是一个重要的区别。 – 2009-12-22 13:08:40