我正在開發一個 .NETCore 應用程式,我想在單擊按鈕時使用 jQuery AJAX Post 呼叫來更新我的 SQL 資料庫。我嘗試了幾種不同的 ajax 呼叫變體,但沒有任何效果。我收到 404 或 400 錯誤。我不確定我做錯了什么。下面是我的 ajax 呼叫的代碼
$("#addMilestoneBtn").on('click', function (e) {
e.preventDefault();
var milestoneDetails = {};
var date = $("#milestoneDate").val();
milestoneDetails.MilestoneName = $("#milestoneText").val();
milestoneDetails.Date = new Date(date);
milestoneDetails.Date.setHours(0, 0, 0, 0);
milestoneDetails.ProjectId = Number($("#projectId").val());
var jsonData = JSON.stringify(milestoneDetails);
var url = '@Url.Action("AddMilestone","HomeController")';
$.ajax({
type: "POST",
url: url,
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
error: one rrorCall
});
function OnSuccess(response) {
var result = response.d;
if (result == "success") {
alert("Milestone Added Sucessfully")
//$("#").html("Milestone addded successfully").css("color", "green");
buildMilestoneTable();
}
$("#milestoneDate").val("");
$("#milestoneText").val("");
}
function OnErrorCall(response) {
//$("#").html("An Error has occurred. Please Try Again!").css("color", "red");
console.log(response);
}
return false;
});
對于 ajax 呼叫,我嘗試使用 @Url.Action 創建 url。我也試過使用這樣的控制器和動作名稱:'/HomeController/AddMilestone'。
這是我的控制器的代碼:
[HttpPost]
public bool AddMilestone(HomeViewModel obj)
{
//Create new Milestone
obj.Milestone.Date = DateTime.Today;
obj.Milestone.MilestoneName = obj.Milestone.MilestoneName;
obj.Milestone.ProjectId = obj.Project.Id;
_db.Milestones.Add(obj.Milestone);
_db.SaveChanges();
return true;
}
這是我的 HomeViewModel 的代碼:
public class HomeViewModel
{
public Project Project{ get; set; }
public IEnumerable<Project> Projects { get; set; }
public IEnumerable<SelectListItem> TeamDropDown { get; set; }
public IEnumerable<SelectListItem> GroupDropDown { get; set; }
public IEnumerable<SelectListItem> StatusDropDown { get; set; }
public IEnumerable<SelectListItem> NotesDropDown { get; set; }
public IEnumerable<SelectListItem> NetworkDropDown { get; set; }
public IEnumerable<SelectListItem> AssigneeDropDown { get; set; }
public GTMNote GTMNote { get; set; }
public SECNote SECNote { get; set; }
public OPSNote OPSNote { get; set; }
public LCNote LCNote { get; set; }
public CTRNote CTRNote { get; set; }
public Update Update { get; set; }
public Milestone Milestone { get; set; }
public NextStep NextStep { get; set; }
}
這是我的表單的 HTML 部分:
<div class="tab-pane" id="milestones" role="tabpanel">
<br />
<fieldset class="form-group">
<input class="form-control col-2" asp-for="Milestone.Date" type="text" value="@ViewBag.DateNoTime" id="milestoneDate">
</fieldset>
<fieldset class="form-group">
<input class="form-control" type="text" asp-for="Milestone.MilestoneName" oninput="charLimit();" id="milestoneText" />
<p>
<small class="text-danger" id="milestoneValidation" style="padding-top: 10px; display: none;">Please provide milestone text.</small>
</p>
</fieldset>
<br />
<a class="btn btn-primary" id="addMilestoneBtn">Add Milestone</a>
<br />
<div id="milestoneTable"></div>
</div>
里程碑類:
public class Milestone
{
[Key]
public int Id { get; set; }
[DisplayName("")]
public string MilestoneName { get; set; }
[DisplayName("Milestone Date")]
public DateTime Date { get; set; }
//Forgein Keys
public int ProjectId { get; set; }
[ForeignKey("ProjectId")]
public Project Project { get; set; }
}
預先感謝您的幫助!
uj5u.com熱心網友回復:
嘗試發送此資料
var milestoneDetails = {
MilestoneName : $("#milestoneText").val(),
ProjectId :$("#projectId".val()
};
var jsonData = JSON.stringify(milestoneDetails);
var url = '@Url.Action("AddMilestone","HomeController")';
// or try , if you get 404
var url = '/Home/AddMilestone';
并使用此操作,添加 [FromBody] 因為您使用的是“application/json” contentType
[HttpPost("~/Home/AddMilestone")]
public bool AddMilestone([FromBody] Milestone mileStone)
{
mileStone.Date = DateTime.Today;
_db.Milestones.Add(mileStone);
_db.SaveChanges();
return true;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/363951.html
