【发布时间】:2016-05-09 15:48:05
【问题描述】:
我在包含 textBox 和 textArea 的表单上遇到问题。这个论坛是共享视图。 textBox 正在验证,但 textArea 没有。我经历了很多其他人面临的问题,但似乎无法解决。我在我的应用程序中创建了另一个表单,并且验证在 textArea 上工作
表单是一个动态创建的问题页面。
@for (var i = 0; i < Model.QuestionAnswers.Count; i++)
{
@switch (Model.QuestionAnswers[i].QuestionType)
{
case QuestionTypeEnum.SentenceRequired:
@Html.TextAreaFor(m => m.QuestionAnswers[i].Answer, 5, 20, new { @class = "input-xlarge persistLocal",
required = "required" })
break;
case QuestionTypeEnum.TextBoxRequired:
@Html.TextBoxFor(m => m.QuestionAnswers[i].Answer, new {@class = "input-xlarge persistLocal", required = "required" })
break;
}
}
这是我的模型,我没有在模型上使用属性,因为当我生成表单时,有些问题不是必需的。我已经尝试过了,但它仍然无法正常工作。
public class QuestionAnswerViewModel
{
public List<QuestionAnswer> QuestionAnswers { get; set; }
}
/// <summary>
///
/// </summary>
public class QuestionAnswer
{
public string Answer { get; set; }
public string Question { get; set; }
public int PermitRequestTypeQuestionId { get; set; }
public QuestionTypeEnum QuestionType { get; set; }
public int AnswerId { get; set; }
[DisplayName("Question")]
public string QuestionAndAnswerText
{
get { return string.Format("{0} <strong>{1}</strong>", Question, Answer); }
}
}
这是我论坛的截图
这些是加载到视图中的脚本
在父视图中,我尝试添加它以尝试强制验证 $.validator.unobtrusive.parse("#formName");
我认为这可能是两个 textarea 标签之间的一些空白,但它似乎不是,并且 javascript 控制台窗口中没有错误,正如我之前所说,它适用于文本框。我还尝试将其更改为 EditFor 并将模型属性更改为使用 multiline 属性和 required 属性,但仍然没有乐趣。
任何正确方向的帮助将不胜感激,谢谢
【问题讨论】:
-
您是否尝试使用
[Required]属性来装饰 Answer 属性? -
@ataravati 我确实尝试过但没有用,我不这样做的原因是因为每个文本框都可能是必需的,所以我不能用 required 属性标记属性.
-
但是,您可以创建一个自定义
RequiredIf属性,该属性根据模型中另一个属性的值使该字段成为必填字段。只需查找RequiredIf,您就会找到一个。 -
顺便说一下,您的
QuestionAndAnswerText属性违反了MVC 哲学。您正在 ViewModel 中执行视图中应该执行的操作。您可以为 QuestionAnswer 模型创建局部视图,而不是这样做,将其命名为QuestionAnswer.cshtml,并将其放在Views\Shared\DisplayTemplates下。然后,您可以使用@Html.DisplayFor()来显示它。 -
required = "required"是 HTML-5 验证,与 jquery 验证无关(在您查看或使用@Html.ValidationMesageFor()时添加jquery.validate.js和juery.validate.unobtrusive.js毫无意义。您的代码将不给你服务器端验证。你需要使用应用于你的属性的验证属性来让它们有任何意义。
标签: javascript asp.net-mvc validation asp.net-mvc-4