У меня есть вопрос о настройке конечных точек в ASP. Net core.
У меня есть действие в контроллере - HttpGet JsonResult GetList (). Он возвращает строку json, отображает ее при просмотре, а строка json находится в отклике сети, поэтому я могу получить ее через JS.
Это мой GetList ():
[HttpGet]
public JsonResult GetList(int GetListId)
{
SavedList = GetListId;
List<string> Products = new List<string>();
List<string> currentList = new List<string>();
using (var db = new ApplicationDbContext())
{
currentList = db.ProductLists.Where(w => w.ListId == GetListId).Select(p => p.Product.Name).ToList();
foreach (var item in currentList)
{
Products.Add(item);
}
}
List<OfflineProduct> ListToCache = new List<OfflineProduct>();
JsonSerializer serializer = new JsonSerializer();
for (int i = 0; i < currentList.Count; i++)
{
var Prod = new OfflineProduct();
Prod.ID = i;
Prod.Name = currentList[i];
Prod.Done = false;
ListToCache.Add(Prod);
}
string json = JsonConvert.SerializeObject(ListToCache);
return Json(json);
}
Я получаю некоторые элементы из базы данных и создаю список на ее основе. Сериализация данных до json и возврат их. Проблема в том, что я получаю JSON строку на странице, неправильно отформатированные данные.
У меня есть Vue View, который готов получить эти JSON данные, но я не знаю, как я могу отправить данные напрямую в Vue View (например ./wwwroot/SavedOfflineList.html).
Мой Vue vue протестирован, я имею в виду, я использовал его для данных c. Это мое мнение:
<h4>Last Saved List</h4>
<div id="app">
<h2>Lista vue:</h2>
<ol>
<li v-for="item in items">
<label>
<input type="checkbox"
v-on:change="toggle(item)"
v-bind:checked="item.Done">
<del v-if="item.Done">
{{ item.Name}}
</del>
<span v-else>
{{ item.Name }}
</span>
</label>
</li>
</ol>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var objArray = [];
async function fetchItems() {
fetch('/GetList/').then(Response => {
return Response.json();
}).then(data => {
for (var i = 0; i < data.length; i++) {
var newObj = { Name: data[i].Name, ID: data[i].ID, Done: data[i].Done };
objArray.push(newObj);
}
if (objArray.length != 0) {
console.log('have some items');
}
console.log(objArray);
return objArray;
}).catch(err => {
console.log(err);
})
}
new Vue({
el: "#app",
data: {
items: [
]
},
created() {
this.getItems();
},
methods: {
toggle: function (item) {
item.Done = !item.Done
},
getItems: async function () {
this.items = await fetchItems();
this.items = objArray;
}
}
});
</script>
<style>
Когда я перехожу на эту страницу GetList, у меня есть URL-адрес, например: / Offline / GetList? GetListId = 36, и я могу читать json данные, как я упоминал из ответа или из содержимого страницы.
Я прочитал несколько статей о конечных точках, но все еще не знаю, как я могу отправить HttpGet в html представление из wwwroot.
Я тестировал это на stati c файлах и работает:
![vue](https://i.stack.imgur.com/atkcb.png)
Спасибо за чтение и помощь!