0
我比较新使用ASP.NET MVC和WebAPI,我正在重写我的网站,并随后使用PHP。使用部分视图HTML片段返回jSON添加到DOM
我有一个页面,用户可以添加一些新的测验密码。使用PHP和jQuery我有一个页面,我会使用jQUERY $ .ajax发布测验密码的详细信息。我曾经与以下字段返回JSON:
- 成功 - 该项目是否被添加到数据库
- 的ErrorMessage - 与错误信息填充的,如果有一个
- 的Html - 对象的HTML这将被添加到DOM
我决定,因为我会添加,更新和删除测验密码,我会使用WebAPI控制器。
只要返回Success BOOL和ErrorMessage值(如果有),但我不确定如何使用转义HTML填充Html
值,该值使用我用于项目在页面上。
这里是我的WebAPI控制器至今:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using uQuiz.Domain.Abstract;
using uQuiz.Domain.Models;
using uQuiz.WebUI.Models.Api;
using Microsoft.AspNet.Identity;
using uQuiz.Domain.Helpers;
namespace uQuiz.WebUI.Controllers
{
[Authorize]
public class PasswordController : ApiController
{
private IQuizEntities Context;
public PasswordController(IQuizEntities context)
{
this.Context = context;
}
// GET: api/Password/5
public object Get(int id)
{
// Check that quiz password exists
if (this.Context.EntitySet<QuizPassword>().Any(x => x.Id == id))
{
QuizPassword quizPassword = this.Context.EntitySet<QuizPassword>().Where(x => x.Id == id).FirstOrDefault<QuizPassword>();
ApiQuizPassword model = new ApiQuizPassword()
{
Id = quizPassword.Id,
Password = quizPassword.Password
};
return model;
}
else
{
return null;
}
}
// POST: api/Password
public ApiResult Post([FromBody]ApiQuizPassword apiQuizPassword)
{
Quiz quiz = this.Context.EntitySet<Quiz>().Find(apiQuizPassword.QuizId);
int userId = User.Identity.GetUserId<int>();
ApiResult result = new ApiResult();
if (!ModelState.IsValid)
{
// Return the first validation result
result.Success = false;
result.ErrorMessage = ModelState.First().Value.Errors[0].ErrorMessage;
return result;
}
if (!quiz.IsQuizOwner(userId))
{
result.Success = false;
result.ErrorMessage = "Logged in user is not quiz owner";
return result;
}
if (quiz.DoesPasswordAlreadyExistForQuiz(apiQuizPassword.Password))
{
result.Success = false;
result.ErrorMessage = "Password already exists for this quiz";
return result;
}
using (var transaction = this.Context.Database.BeginTransaction())
{
try
{
QuizPassword quizPassword = this.Context.EntitySet<QuizPassword>().Create();
// Assign posted values
quizPassword.Password = apiQuizPassword.Password;
quizPassword.QuizId = apiQuizPassword.QuizId;
// Assign default values
quizPassword.RemainingUses = 0;
quizPassword.UnlimitedUses = true;
quizPassword.UseCount = 0;
quizPassword.Deleted = false;
quizPassword.CreatedTime = TimeHelper.UnixTimestamp;
this.Context.EntitySet<QuizPassword>().Add(quizPassword);
this.Context.SaveChanges();
transaction.Commit();
result.Success = true;
return result;
}
catch (Exception)
{
transaction.Rollback();
result.Success = false;
result.ErrorMessage = "Failed to save the quiz password";
return result;
}
finally
{
transaction.Dispose();
}
}
}
// PUT: api/Password/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE: api/Password/5
public void Delete(int id)
{
using (var transaction = this.Context.Database.BeginTransaction())
{
try
{
QuizPassword quizPassword = this.Context.EntitySet<QuizPassword>().Find(id);
this.Context.Entry(quizPassword).State = EntityState.Deleted;
this.Context.SaveChanges();
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
finally
{
transaction.Dispose();
}
}
}
}
}
下面是我从Post
方法返回我的控制器中我的API结果类:
public class ApiResult
{
public bool Success { get; set; }
public string ErrorMessage { get; set; }
public HtmlString Html { get; set; }
}
我的部分观点被称为_QuizPasswordPartial
。
我完全忽略了这个标记,我应该只从我的Get
方法中返回HTML吗?
无论哪种方式,我想返回我的控制器内呈现的部分在JSON结果。
有时您需要将结果中的编码html添加到dom中。我找到了一个方法来做到这一点,我可能会将其作为答案发布... – Luke 2014-10-12 13:04:47