首页 > 解决方案 > 将模型从剃刀传递到 javascript - 非常奇怪的错误

问题描述

我试图将 HTML 表格行中的选定模型直接传递给 javascript 函数,包括转换为 JSON。由于以下问题,转换失败。
此外,我吓坏了 6 个多小时,试图了解它为什么不起作用。现在我知道是什么导致了问题,不知道如何解决它。这是我尝试过的(简单易行):

<table class="table table-hover">
<thead align="center">
    <tr>
        <th scope="col">AssetID</th>
        <th scope="col">Loaction</th>
        <th scope="col">AreaIn</th>
        <th scope="col">Rooms</th>
        <th scope="col">ImageURL</th>
        <th scope="col">Action</th>

    </tr>
</thead>
<tbody align="center">

    @foreach (var a in @Model.OwnAssetsList)
    {

        String[]  assetArray = new String[8] { a.AssetID.ToString(), a.OwnerID.ToString(), a.OwnerPublicKey.ToString(), a.Loaction.ToString(), a.AreaIn.ToString(), a.Rooms.ToString(), a.ImageURL.ToString(), a.Price.ToString() };
        <tr>
            <td>@a.AssetID</td>
            <td>@a.Loaction</td>
            <td>@a.AreaIn</td>
            <td>@a.Rooms</td>
            <td><a target="_blank" href=@a.ImageURL>Click</a></td>
            <td><button class="btn btn-primary" data-toggle="modal" data-target="#exampleModalLong" onclick="offerContract(@a.Loaction/* or @a.ImageURL*/)">Offer Contract</button></td>

        </tr>
    }
</tbody>

在 Javascript 中:

@section scripts
{
<script type="text/javascript">
    function offerContract(param)
    {    
        document.getElementById("dialogAssetID").innerHTML = "Asset No:".bold()+param.AssetID;
        document.getElementById("dialogOwnerAddress").innerHTML="Your Public Key:" +param.OwnerID;
  }               
</script>
}

当且仅当我传递@a.Loaction 或@a.ImageURL 时,javascript 函数才会失败。这是控制台中的错误:'Uncaught SyntaxError: missing ) after argument list'。 在此处输入图像描述

模型的其余属性成功通过。'@a.Loaction' 和 '@a.ImageURL' 在 HTML 表格中工作正常我现在添加模型和表格方案:

public class Asset
{
    [Key]
    public int AssetID { get; set; }

    [Required]
    public int OwnerID { get; set; }

    [Required]
    public string OwnerPublicKey { get; set; }

    [Required]
    public string Loaction { get; set; }

    [Required]
    public int AreaIn { get; set; }

    [Required]
    public int Rooms { get; set; }

    [Required]
    public string ImageURL { get; set; }

    [Required]
    public double Price { get; set; }
    }

在此处输入图像描述

我将不胜感激。在这个问题上花费了 6 个多小时。

标签: javascriptsql-serverentity-frameworkrazornvarchar

解决方案


我找到了另一种传递有问题的属性的方法:

<tbody align="center">
    @{ int i = 0;}
    @foreach (var a in @Model.OwnAssetsList)
    {
        string loaction = "loc" + i;
        string url = "url" + i;

        <tr>
            <td>@a.AssetID</td>
            <td id=@loaction>@a.Loaction</td>
            <td>@a.AreaIn</td>
            <td>@a.Rooms</td>
            <td><a id=@url target="_blank" href=@a.ImageURL>Click</a></td>
            <td><button class="btn btn-primary" data-toggle="modal" data-target="#exampleModalLong" onclick="offerContract( @i)">Offer Contract</button></td>
        </tr>
        i++;
    }

</tbody>

在函数中:

 function offerContract(param)
    {        
        var idLoac = "#loc" + param;
        var idUrl = "#url" + param;
        var demdloc = $(idLoac).text();
        var demdurl = $(idUrl).attr("href");
        document.getElementById("dialogAssetID").innerHTML = "Asset No:".bold() + demdloc;
        document.getElementById("dialogOwnerID").innerHTML = "Your ID:".bold() + demdurl;
    }

并且属性完全通过。


推荐阅读