0

可以直接从 HTML 调用剃须刀页面的 @functions{} 部分中的方法吗?这似乎工作正常,并且比调用 API 容易得多,但我想知道这是否有缺点(安全性、性能等)?

例如,在代码中...

@functions {

public class Tickets: PageModel
{
    public ApplicationDbContext _db { get; set; }
    public Tickets(ApplicationDbContext db)
    {
        _db = db;
    }

    public void OnGet()
    {
    }

    public string GetTickets(int Top) //--> THIS IS THE METHOD I AM CALLING
    {
        var data = _db.Tickets.OrderByDescending(x => x.CreatedAt).Take(Top);
        var jdata = JsonConvert.SerializeObject(data.ToList());
        return jdata;
    }
}
}

和HTML...

<div class="card alert-warning" v-for="ticket in tickets">
    <div class="card-body">
        <h4 class="card-title">{{ticket.TicketSubject}}</h4>
        <a href="#" class="card-link">Card link</a>
        <a href="#" class="card-link">Another link</a>
    </div>
</div>

@section Scripts {

<script>
    new Vue({
        el: '#app',
        data: {
            dismissSecs: 5,
            dismissCountDown: 5,
            tickets: @Html.Raw(Model.GetTickets(100)),  //-->THIS WORKS, BUT IT IS OK TO USE LIKE THIS?
            xx: ''
        }
 })
 </script>

 }
4

1 回答 1

0

它之所以有效,是因为我相信在呈现页面并且传入常量值时会调用该方法。在不涉及 AJAX 代码的情况下,它不会自动执行诸如更新客户端之类的操作。

但是要回答您的问题,我认为“更正确”的方法是在 OnGet 中设置绑定属性并引用该客户端

public class Tickets : PageModel
{
    public ApplicationDbContext _db { get; set; }
    public Tickets(ApplicationDbContext db)
    {
        _db = db;
    }

    [BindProperty]
    public string TicketData { get; set; }

    public void OnGet()
    {
        TicketData = GetTickets(100);
    }

    public string GetTickets(int Top) 
    {
        var data = _db.Tickets.OrderByDescending(x => x.CreatedAt).Take(Top);
        var jdata = JsonConvert.SerializeObject(data.ToList());
        return jdata;
    }
}
于 2017-11-03T14:17:25.113 回答