我: 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