我: GuestResponseRepository,IRepository - >接口,HomeController的 - > Controlle,谢谢 - >查看库布尔的观点
的GuestReresponseRepository有它的响应列表。当我通过表单添加回复时,回复将添加到列表中。当您尝试使用相同的值第二次添加响应时,AddReponse方法返回false。我想在我的视图中使用bool来显示不同的文本。我怎样才能做到这一点?下面我的代码
GuestResponseRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using PartyInvites.Abstract;
namespace PartyInvites.Models
{
public class GuestResponseRepository : IRepository
{
private static List<GuestResponse> responses = new List<GuestResponse>();
IEnumerable<GuestResponse> IRepository.GetAllResponses()
{
return responses;
}
bool IRepository.AddResponse(GuestResponse response)
{
if (responses.Any(x => x.Email == response.Email)) //here
{
if (responses.Any(x => x.WillAttend == response.WillAttend)) //here
{
return false;
}
var attend = responses.First(x => x.Email == response.Email && x.WillAttend != response.WillAttend);
attend.WillAttend = response.WillAttend;
return true;
}
responses.Add(response);
return true;
}
}
}
IRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PartyInvites.Models;
namespace PartyInvites.Abstract
{
public interface IRepository
{
IEnumerable<GuestResponse> GetAllResponses();
bool AddResponse(GuestResponse response);
}
}
控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PartyInvites.Models;
using PartyInvites.Abstract;
namespace PartyInvites.Controllers {
public class HomeController : Controller {
private IRepository repository;
public HomeController(IRepository iRepository)
{
this.repository = iRepository;
}
public ViewResult Index() {
return View(repository.GetAllResponses());
}
public ViewResult PartyPeople()
{
return View(repository.GetAllResponses());
}
[HttpGet]
public ViewResult RsvpForm() {
return View();
}
[HttpPost]
public ViewResult RsvpForm(GuestResponse guestResponse) {
if (ModelState.IsValid) {
repository.AddResponse(guestResponse);
return View("Thanks", guestResponse);
}
else
{
// there is a validation error
return View();
}
}
}
}
视图
@model PartyInvites.Models.GuestResponse
@{
ViewBag.Title = "Thanks";
}
<div class="text-center">
<h1>Thank you, @Model.Name!</h1>
<div class="lead">
@if (Model.WillAttend == true) {
@:It's great that you're coming. The drinks are already in the fridge!
} else {
@:Sorry to hear that you can't make it, but thanks for letting us know.
}
@if (bool from Addresponse is false) {
@:<p>You already submitted this response. Are you sure this is right?</p>
}
</div>
<a href="/Home/PartyPeople">Link naar pp</a>
</div>
我会建议不要将模型用作视图模型。您的控制器操作(或者更好的是某种服务)应该基于模型和存储库的返回来构建视图模型。这样可以避免使用ViewBag。 –
可能重复的[MVC - 通过ViewData作为布尔](http://stackoverflow.com/questions/4321694/mvc-pass-viewdata-as-boolean) –
我同意你。如果我知道如何,我会精确地按照你的方式去做。但这是他们教我做atm的。所以如果你有一些例子不要犹豫分享:) – valheru