如何使用Ajax(或类似的东西)调用模型函数

本文关键字:调用 函数 模型 Ajax 何使用 | 更新日期: 2023-09-27 18:13:10

我有一个模型,当调用方法ToHtml()时,它(除其他外)返回自身的表格表示。

LotSpaceLotRow都是(为了简洁)我没有包括的模型。它们实际上进行数据库调用,这也是我想使用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(或类似的东西)调用模型函数

是。但是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请求。您只需要服务器上的一个端点来处理该请求并返回响应。