ASP.NET MVC检查用户是否已在此表中发布

时间:2018-02-27 11:19:35

标签: asp.net-mvc entity-framework razor

我要切入追逐。 我创建了一个Survey平台,它有3个模型。

模型调查,它有许多SurveyQuestion,其中有许多SurveyAnswer。 (我可以插入这些模型的所有值,但我认为不需要)

public class SurveyAnswer
{
    [Key]
    public int Id { get; set; }

    public string Value { get; set; }

    public string SubmittedBy { get; set; }

    public int SurveyId { get; set; }

    public int QuestionId { get; set; }

    public virtual Survey Survey { get; set; }

    public virtual SurveyQuestion Question { get; set; }

    public string Comment { get; set; }

}

现在我遇到的一个问题是,一旦有人创建了调查而另一个人正在启动调查,他就会回答这个问题。下次他进入索引页面时如何显示?如何显示"您已经提交了此调查"?我是在Controller中还是在View中执行此操作?我现在更喜欢这个行动(它是所有正在进行的调查的菜单)。

    [HttpGet]
    public ActionResult Menu()
    {
        var survey = Mapper.Map<IEnumerable<Survey>, IEnumerable<SurveyViewModel>>(_unitOfWork.SurveyRepository.Get());
        return View(survey.ToList());
    }

2 个答案:

答案 0 :(得分:1)

将所有验证规则放入AbstractValidator类。

var request = require('request');
    request('http://localhost:3000/api/jobs/asd', function (error, response, body) {
      if (!error && response.statusCode == 200) {
        console.log(body) // Print the google web page.
      }
    }

如果要在ViewModel中检查唯一性,可以使用Remote。

[Validator(typeof(SurveyAnswerValidator))]
public class SurveyAnswer{

[Key]
public int Id { get; set; }

public string Value { get; set; }

public string SubmittedBy { get; set; }

public int SurveyId { get; set; }

public int QuestionId { get; set; }

public virtual Survey Survey { get; set; }

public virtual SurveyQuestion Question { get; set; }

public string Comment { get; set; }

}

public class SurveyAnswerValidator : AbstractValidator<SurveyAnswer>
{
    public SurveyAnswerValidator()
    {
     //list your rules
     RuleFor(x => x.SubmittedBy).Must(BeUnique).WithMessage("Already 
     submitted this survey");
    }

    private bool BeUnique(string submittedBy)
    {
        if(_context.SurveyAnswers.
        FirstOrDefault(x => x.SubmittedBy == submittedBy) == null){
        return true;
        }
        else{
        return false;
        }

    }
}

其中HasSubmitted是一种方法,您可以在控制器中创建该方法,以便在用户提交时返回true。 RemoteAttribute https://msdn.microsoft.com/en-us/library/gg508808(VS.98).aspx

答案 1 :(得分:0)

vahdet的最佳解决方案(在评论中提出)

 [Index("IX_AnswerQuestion", 2, IsUnique = true)]
    [StringLength(36)]
    public string SubmittedBy { get; set; }

    public int SurveyId { get; set; }

    [Index("IX_AnswerQuestion", 1, IsUnique = true)]
    public int QuestionId { get; set; }