2017-11-03 11 views
0

かんたんページの@functions {}セクションのメソッドをHTMLから直接呼び出すことはできますか?これはうまくいくと思われ、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> 

} 

答えて

0

私は、ページがレンダリングしているときにメソッドが呼び出されると信じているのでそれは動作します一定の値が渡されています.AJAXコードが関与することなく、クライアント側の更新などの処理は自動的には実行されません。

しかし、あなたは、私が「より正確」アプローチは、クライアント側

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; 
    } 
} 
ことOnGetとリファレンスのバインディングプロパティを設定することだと思います質問に答えるために