无法与我的AJAX和MVC 6控制器交朋友。
这是我为 SetFormValues POST-action定义AJAX调用的方式:
Index.cshtml
$.ajax({
type: "Post",
url: "Home/SetFormValues",
data: { Name: name, Phone: phone },
dataType: "json",
success: function (result) {
SuccessFunction(result)
},
error: function () {
alert("ALARM!");
},
async: false
})
我看到控制器工作并执行 SetFormValues 操作,该操作定义如下:
HomeController.cs
[HttpPost]
public JsonResult SetFormValues(string Name, string Phone)
{
string NameErrorStr = string.IsNullOrWhiteSpace(Name) ? "Обязательное поле" : string.Empty;
string PhoneErrorStr = string.IsNullOrWhiteSpace(Phone) ? "Обязательное поле" : string.Empty;
var result = new { NameError = NameErrorStr, PhoneError = PhoneErrorStr };
var jresult = Json(result);
return jresult;
}
最后,他是如何定义 SuccessFunction(结果):
再次Index.cshtml
function SuccessFunction(result) {
alert("Success function shit executed. result=" +
result + "NameError=" +
result.NameError + ". PhoneError=" +
result.PhoneError);
$("#nameerror").append(result.NameError);
$("#phoneerror").append(result.PhoneError);
}
result = [object Object]
result.val = undefined
也许我必须正确地反序列化JSON结果或填写上面的声明中的一些属性,我不知道。 我使用lattest库进行jquery,验证和不引人注目。 我也尝试了 JSON.parse(result),正如它在lattest jQuery规范中提到的那样,但它也没有用。
请帮帮我:)
答案 0 :(得分:4)
在asp.net核心中,默认情况下,序列化程序使用 camelCase
属性名称进行json序列化。所以你的结果将是这样的
{"nameError":"some message","phoneError":"some message here"}
Javascript区分大小写。所以使用正确的案例
$("#nameerror").append(result.nameError);
$("#phoneerror").append(result.phoneError);
供参考:MVC now serializes JSON with camel case names by default
答案 1 :(得分:1)
当我在启动文件中添加了这一行时,它运行得很好
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
services.AddDbContext<DataContext>(option => option.UseSqlServer(Configuration.GetConnectionString("DbCrudOperation")));
}
function Edit(id) {
$.ajax({
type: 'GET',
url: "/AjacCrud/EditPahe/" + id,
dataType: 'JSON',
contentType: "application/json",
success: function (response) {
$("#nameEmp").val(response.ID);
console.log(response.ID);
},
error: function (GetError) {
alert(GetError.responseText);
}
});
};