如何使用Ajax(或类似的东西)调用模型函数
本文关键字:调用 函数 模型 Ajax 何使用 | 更新日期: 2023-09-27 18:13:10
我有一个模型,当调用方法ToHtml()
时,它(除其他外)返回自身的表格表示。
LotSpace
和LotRow
都是(为了简洁)我没有包括的模型。它们实际上进行数据库调用,这也是我想使用ajax调用重新绘制这张图的原因。如果它们与这个问题相关,我可以添加它们。
public class Lot
{
public List<LotSpace> Spaces;
public List<LotRow> Rows;
public int SpacesPerRow
{
get
{
return (Spaces.Count / Rows.Count);
}
}
public Lot(int startSpace, int endSpace, int numberOfRows)
{
Spaces = LotSpace.ToList(startSpace, endSpace);
/***testing*****/
Spaces[0].Blocked = true;
Spaces[1].Blocked = true;
Spaces[2].Blocked = true;
Spaces[3].Blocked = true;
Spaces[4].Blocked = true;
Spaces[5].Blocked = true;
Spaces[6].Blocked = true;
Spaces[7].Blocked = true;
/***testing*****/
Rows = LotRow.ToList(numberOfRows);
LoadSpacesIntoRows();
}
private void LoadSpacesIntoRows()
{
foreach(var space in Spaces)
{
int rowIndex = 0;
while(rowIndex < Rows.Count)
{
if(Rows[rowIndex].Spaces.Count < SpacesPerRow)
{
Rows[rowIndex].Spaces.Add(space);
break;
}
rowIndex++;
}
}
}
public string ToHtml()
{
Table table = MapMaker.HTML.CreateTable(this);
MapMaker.HTML.AddSpaces(table, this);
return MapMaker.HTML.ControlToString(table);
}
}
现在它是这样从视图中调用的:
控制器public ActionResult Index()
{
return View(new Lot(392, 1, 7));
}
<<p> 视图/strong> <div class="row">
@Html.Raw(Model.ToHtml())
</div>
这是有效的,但在某些情况下,我希望能够重新绘制这张地图。是否有可能从视图进行ajax调用,以便我可以根据需要重新绘制视图的这一部分,而无需重新加载整个页面?
是。但是AJAX并不是"调用模型上的方法",而是调用控制器动作。例如,你可以用一个新视图创建一个新的控制器动作它只返回那个HTML:
public ActionResult Lot()
{
return View(new Lot(392, 1, 7));
}
并且,除了@model
声明之外,视图将只是:
@Html.Raw(Model.ToHtml())
现在您有一个URL,它只返回该表的HTML,而不返回其他任何内容。你可以使用jQuery的load()
函数来获取它:
$('#yourDiv').load('@Url.Action("Lot", "YourController")');
AJAX请求和其他请求一样是标准的HTTP请求。您只需要服务器上的一个端点来处理该请求并返回响应。