如何在ajax append函数中传递一个变量(使用razor将其传递到html元素中)

本文关键字:razor 使用 元素 html 变量 ajax append 函数 一个 | 更新日期: 2023-09-27 18:29:20

我需要将对象的Id传递到html元素(剃刀部分)中,但它无法识别。看起来Id不在它的范围内,或者其他什么。有没有一种方法可以将值传递到append函数中html元素的剃刀部分?

$.ajax({
        data: data,
        url: url + "?searchTerm=" + data
    }).success(function (response) {
        console.log(response);
        var table = $('#companyTable');
        var tBody = table.children('tbody');
        tBody.html("");
        var textbox = document.getElementById("searchBar");
        textbox.value = "";
        tBody.append(
            "<tr><td>" +response.CompanyName + " </td><td>" +
                       response.CompanyIdNumber + "</td><td>" +
                       response.CompanyTaxNumber + "</td><td>" +
           "<p><button onclick='"location.href='@Url.Action("Edit", "Company", new { @id = response.CompanyId  })''"> Edit</button></p>" +
                           "</td></tr>"
                );
            table.removeClass("hidden");
            var originalTable = $('#originalTable');
            originalTable.remove();
        }).error(function (response) {
            console.log(response);
        });
    }

谢谢。

如何在ajax append函数中传递一个变量(使用razor将其传递到html元素中)

我这样做:

+ "<p><button onclick='"location.href='@(Url.Action("Edit", "Company"))?id=" + response.CompanyId + "''">Edit</button>"

您完全没有服务器端渲染和浏览器执行的概念。考虑这个例子,您的服务器渲染您的js代码,并将所有工作留给浏览器,然后浏览器以某种方式执行Ajax请求(点击按钮),当Ajax完成时-您有一个响应值,但这个值只存在于浏览器上下文中,因此将值传递到razor中是没有意义的,因为它在渲染文件时已经完成了工作

现在,该怎么办?最简单的解决方案是自己编辑公司的核心Url,因为剃刀根本不知道客户端发生了什么,例如:

location.href="/company/1/edit" //where 1 is id from Ajax request

最简单的完整解决方案是

public ActionResult WhateverMethod()
{
 // ....
  var urlHelper = new UrlHelper(this.ControllerContext.RequestContext);
  response.Url = Url.Action("Edit", "Company", new { @id = response.CompanyId  });
 // ....
}

tBody.append(
  "<tr><td>" +response.CompanyName + " </td><td>"
  + response.CompanyIdNumber + "</td><td>"
  + response.CompanyTaxNumber + "</td><td>"
  + "<p><button onclick='"location.href='" + response.Url + "''"> Edit</button></p>"
  + "</td></tr>");

在JavaScript中调用Razor方法只会让你感到悲伤。

response.CompanyId is considered as string , so try by concatenating it as below   
var a="location.href='@Url.Action("Edit", "Company", new{@id='"+response.CompanyId+"'})'"
 response.CompanyId ( "<tr><td>" +response.CompanyName + " </td><td>" +
 response.CompanyIdNumber + "</td><td>" +
 response.CompanyTaxNumber + "</td><td>" +
 "<p><button onclick='""+a +"'"> Edit</button></p>" + "</td></tr>")