当有一个方法 - 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));
}
查看
<div class="row">
@Html.Raw(Model.ToHtml())
</div>
这有效,但在某些情况下,我希望能够重绘这张地图。是否可以从视图中进行ajax调用,以便我可以按需重绘该部分视图而无需重新加载整页?
答案 0 :(得分:3)
是。但是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请求。您只需要服务器上的端点来处理该请求并返回响应。