Я в растерянности, так как не могу загрузить данные в представление.
У нас есть приложение, которое мы создаем как команда, которая обрабатывает данные в списке Sharepoint.
Это приложение написано в MVC.NET Core
Это приложение почему-то не использует контроллеры и не выполняет действия после публикации, хотя метод PostAsync для бэкэнда View (cshtml.cs)
Моя задача - заполнить представление, когда представление загружается данными из списка sharepoint
Однако, когда я пытаюсь назначить свойства модели в методе OnGet или OnGetAsync, эти свойства назначаются ПОСЛЕ загрузки представлений и не отражаются на странице
Я очень новичок в этой технике
Как правильно загрузить данные в представление. Должен ли я сделать с помощью методов OnGet в серверной части представления?
Должен ли я сделать это через контроллер? Если да, как мне связать новый контроллер с существующим представлением?
Независимо от того, сколько я пытался, контроллер, который я сгенерировал, не получил бы точку останова
Каким будет мое подходящее действие / дизайн для заполнения представления загрузки данными?
Заранее благодарю за помощь
Вот примеры кода, которые у меня есть
Вид
@page "{ID}"
@using Newtonsoft.Json;
@model ExclusionRequestItemModel
@{
ViewData["Title"] = "Exclusion Request Item Form";
}
@section AdditionalStyles{
<link rel="stylesheet" href="~/css/BIS232.css" asp-append-version="true" />
}
@using (Html.BeginForm("Exclusion Request Item Form", "DefaultController"))
{
<div class="bisformwrapper">
<h2>Exclusion Request Form</h2>
<form method="post">
<div style="width:100%; margin:0 auto;">
<div>
<div asp-validation-summary="All" class="text-danger"></div>
<h3>Product Information</h3>
<span class="glyphicons glyphicons-info-sign"></span>
<div class="jumbotron">
<div class="row form-group">
<div class="col-xs-12 col-md-4">
<div class="bisformdynamiclabel">Product Type</div>
<input class="form-control" type="hidden" asp-for="BIS232Request.Title" />
<input class="form-control" type="hidden" asp-for="BIS232Request.Status" />
<input class="form-control" type="hidden" asp-for="BIS232Request.Product" />
<div id="MetalType">
<div class="bisformdynamiclabel" id="MetalClass">@Html.LabelFor(m => m.BIS232Request.Product)</div>
</div>
</div>
</div>
<br />
</div>
</div>
</form>
</div>
}
Бэкэнд вида (.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Mvc.RazorPages;
using BIS232WebProject.Model;
using Newtonsoft.Json;
using System.Net;
using System.Net.Http;
using System.Configuration;
using System.Text;
using Microsoft.AspNetCore.Mvc.Controllers;
using BIS232WebProject.Controllers;
namespace BIS232WebProject.Pages.Forms
{
public class ExclusionRequestItemModel : PageModel
{
public int ItemID { get; set; }
public IActionResult OnGet(int ID)
{
ItemID = ID;
JToken jsonData = null;
Task<string> outerTask = GetExclusionRequestJSON(ID.ToString());
outerTask.ContinueWith(task =>
{
string result = task.Result;
var jobj = JObject.Parse(result);
jsonData = jobj["fields"];
if (jsonData != null)
{
var jobjFields = JObject.Parse(jsonData.ToString());
var JSONData = jobjFields["JSONData"];
if (JSONData != null)
{
var JSONDataFields = JObject.Parse(JSONData.ToString());
BIS232Request.Product = JSONDataFields["Product"].ToString() ?? string.Empty;
BIS232Request.JSONData.MetalClass = JSONDataFields["MetalClass"].ToString() ?? string.Empty;
}
}
});
var requestVm = new ExclusionRequestItemModel();
requestVm.BIS232Request.JSONData.MetalClass = "This was set in the model before rendering the view and should be overwritten.";
return Page();
//return Page(requestVm);
}
//private readonly BIS232Request.JSONData.MetalClas _context;
//public CreateModel(BIS232WebProject.Models.RazorPagesMovieContext context)
//{
// _context = context;
//}
public static async Task<string> GetExclusionRequestJSON(string ID)
{
var status = string.Empty;
try
{
using (var client = new HttpClient())
{
var content = new StringContent("{ID:1}", Encoding.UTF8, "application/json");
//var result = client.GetAsync("https://itasharepointapi.azurewebsites.net/api/GetAllExclusionRequests").Result.Content;
//https://itasharepointapi.azurewebsites.net/api/GetAllExclusionRequests
string requestUrl = "https://itasharepointapi.azurewebsites.net/api/GetExclusionRequestById";
var request = new HttpRequestMessage(new HttpMethod("POST"), requestUrl);
request.Content = new StringContent("{\"ID\":1}", Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
string jsonContent = response.Content.ReadAsStringAsync().Result;
return jsonContent;
}
}
catch (Exception ex)
{
status = $"Error updating the Sharepoint list: {ex.Message}";
}
return status;
}
[BindProperty]
public ExclusionRequest BIS232Request { get; set; } = new ExclusionRequest()
{
Product = "Steel",
Status = "New Request",
Title = Guid.NewGuid().ToString(),
JSONData = new MetalExclusionData()
{
Ports = new List<string>() { "" },
ProductStandards = new List<ProductStandard>() { new ProductStandard() { Organization = "Please Select", Designation = "" } },
MetalClass = "vasua"
}
//HTSUSCode = "1234"
//,OwnershipActivity = new OwnershipActivity(){
// Ownership =""
//}
};
//public async Task OnGetAsync()
//{
// //Customers = await _db.Customers.AsNoTracking().ToListAsync();
// string vasya = "";
//}
public async Task<IActionResult> OnPostAsync(ExclusionRequest bIS232Request)
{
if (bIS232Request.JSONData.OwnershipActivity == null || bIS232Request.JSONData.OwnershipActivity.Ownership == null)
{
ModelState.AddModelError("OwnershipAnswer", "You must select an option.");
}
if (bIS232Request.JSONData.ExclusionRequesterActivity == null || bIS232Request.JSONData.ExclusionRequesterActivity == "" || bIS232Request.JSONData.ExclusionRequesterActivity == "Please Select")
{
ModelState.AddModelError("ExclusionRequesterActivity", "You must select an option.");
}
if (bIS232Request.JSONData.ExclusionRequesterActivity == "Other" && bIS232Request.JSONData.ExclusionRequesterComments == null)
{
ModelState.AddModelError("ExclusionRequesterActivityComment", "Please provide comments.");
}
if (bIS232Request.JSONData.ExclusionExplanation.Explanation == "Other" && bIS232Request.JSONData.ExclusionExplanation.Comments == null)
{
ModelState.AddModelError("ExclusionExplanationAnswer", "Please provide comments.");
}
//ExclusionExplanationAnswer
if (bIS232Request.JSONData.NonUSProducer == null || bIS232Request.JSONData.NonUSProducer.BehalfOf == null)
{
ModelState.AddModelError("BehalfOfAnswer", "You must select an option.");
}
if (!ModelState.IsValid)
{
return Page();
}
//Do POST to database then redirect to Index
//string bIS232RequestJson = JsonConvert.SerializeObject(bIS232Request);
//string status = await InsertModelIntoSharepointList(bIS232RequestJson);
//set JSONData section from parent object
BIS232Request.JSONData.Status = BIS232Request.Status;
BIS232Request.JSONData.HTSUSCode = BIS232Request.HTSUSCode;
BIS232Request.JSONData.Product = BIS232Request.Product;
return Page();
//return RedirectToPage("../Index");
}
}
}
Модель
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace BIS232WebProject.Model
{
public class ExclusionRequest
{
public int ID { get; set; }
[Required]
public string Title { get; set; }
[Required]
public string Product { get; set; }
}
}