【发布时间】:2016-04-22 12:28:04
【问题描述】:
这是我的模型
public partial class Asset
{
public long ID { get; set; }
[RegularExpression("^[0-9]*$", ErrorMessage = "Title must be numeric")]
public string Title { get; set; }
public string Description { get; set; }
}
在我看来
<div class="Content-inner-pages">
<div class="TopHeading TopHeading2">
<h2>Assets</h2>
@* @Html.ActionLink("Create", "Create")*@
<a class="CreateBtn AssetsBtn" href="Javascript:void(0);" onclick="javascript: HideUpdateButton();">Add Asset</a>
<div class="clearfix"></div>
</div>
<input type="hidden" id="hdnIsNew" value="1" />
<input type="hidden" id="hdnRecId" />
<!-- Slide Popup panel -->
<div class="cd-panel from-right AddAssetForm">
<header class="cd-panel-header">
<h3>Add Asset</h3>
<a href="javascript:void(0);" onclick="javascript: DisplayClear();" class="cd-panel-close">Close</a>
</header>
<div class="cd-panel-container">
<div class="cd-panel-content">
<!-- Add Reminder -->
<div class="form-horizontal form-details popup-box">
@using (Html.BeginForm("AssetsPage", "SuperAdmin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
<label class="col-md-5 control-label">
Asset Title
</label>
@Html.TextArea("ID", "", new { @class = "form-control", @id = "ID", @style = "display:none;" })
<div class="col-md-7">
@Html.TextBox("Title", "", new { @class = "form-control", @id = "Title", required = "required" })
@Html.ValidationMessage("Title", "*")
</div>
</div>
<div class="form-group">
<label class="col-md-5 control-label">Description</label>
<div class="col-md-7">
@Html.TextArea("Description", "", new { @class = "form-control", @id = "Description", required = "required" })
@Html.ValidationMessage("Description", "*")
</div>
</div>
<div class="form-group">
<label class="col-md-5 control-label">Attachment</label>
<div class="col-md-7">
<input type="file" name="file" id="filena" class="custom-file-input" required="required">
@Html.ValidationMessage("file", "*")
</div>
</div>
<div class="form-group">
<div class="col-md-7 col-md-offset-5">
<input type="submit" id="SaveBtn" value="Save" name="actiontype" class="btn-class btn-success">
<input type="submit" id="UpdateBtn" value="Update" name="actiontype" class="btn-class btn-success">
</div>
</div>
}
</div><!-- End Add Reminder -->
</div> <!-- cd-panel-content -->
</div> <!-- cd-panel-container -->
</div> <!-- cd-panel -->
<div class="box">
<div class="box-content Custom-DataTable">
<table id="AdministationAssets" class="table table-hover dt-responsive CustomDatable AdministationAssetsTable" cellspacing="0" width="100%">
<thead>
<tr>
<th style="width:5%;">Assets</th>
<th style="width:15%;">
@Html.DisplayNameFor(model => model.Title)
</th>
<th style="width:50%;">
@Html.DisplayNameFor(model => model.Description)
</th>
<th style="width:8%;">Options</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td id="target" class="">
@{
switch (item.Extenstion.ToLower())
{
case "doc":
<i class="fa fa-file-word-o text-primary AssetIcon"></i>
break;
case "docx":
<i class="fa fa-file-word-o text-primary AssetIcon"></i>
break;
case "xls":
<i class="fa fa-file-excel-o text-success AssetIcon"></i>
break;
case "xlsx":
<i class="fa fa-file-excel-o text-success AssetIcon"></i>
break;
case "ppt":
<i class="fa fa-file-powerpoint-o text-danger AssetIcon"></i>
break;
case "jpg":
<i class="fa fa-file-photo-o text-warning AssetIcon"></i>
break;
case "png":
<i class="fa fa-file-photo-o text-warning AssetIcon"></i>
break;
case "pdf":
<i class="fa fa-file-pdf-o text-danger AssetIcon"></i>
break;
case "zip":
<i class="fa fa-file-archive-o text-muted AssetIcon"></i>
break;
case "htm":
<i class="fa fa-file-code-o text-info AssetIcon"></i>
break;
case "txt":
<i class="fa fa-file-text-o text-info AssetIcon"></i>
break;
case "mov":
<i class="fa fa-file-movie-o text-warning AssetIcon"></i>
break;
case "mp3":
<i class="fa fa-file-audio-o text-warning AssetIcon"></i>
break;
default:
<i class="fa fa-file AssetIcon"></i>
break;
}
}
</td>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.ActionLink("Download", "DownloadAsset", new { id = item.ID }, new { @class = "ActionInvoice" })
@Html.ActionLink("Edit", "AddEditRecord", new { id = item.ID }, new { @class = "ActionEdit AssetEdit", onclick = "javascript:GetEditDetails(" + item.ID + ")" })
@Html.ActionLink("Delete", "AssetDelete", new { id = item.ID }, new { @class = "ActionDelete", onclick = "return confirm('Are You Sure delete this record?');", })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
事情是对必填字段和正则表达式数字进行验证,但没有为正则表达式显示错误消息,因为我想显示该错误:标题必须是数字。 请在应用验证时告诉我我在哪里做错了。
【问题讨论】:
-
改用
@Html.ValidationMessageFor(model => model.Title)。 -
这个视图的目的是显示现有
Asset的集合并有一个表单来创建一个新的Asset吗?在这种情况下,您的表单中的所有代码都不会正常工作,尤其是验证,因为您的模型没有名为Title、Description等的属性,因此没有什么可以验证的。 -
@StephenMuecke 此视图将在表中显示记录,我有添加资产选项,其中一个模式弹出窗口将插入资产。 (imgur.com/GqImWXR) 和 (imgur.com/NgkLiD7)
-
好的,现在我明白了你想要做什么(我假设你通过 ajax 提交表单,这样你就可以继续添加和编辑?)你需要一种不同的方法,因为你创建表单控制与您的模型没有关系,因此不会发生验证(始终,始终使用强类型
xxxFor()辅助方法)。我需要休息一下,但我会在早上添加一个答案,说明如何解决此问题以及您的代码中的许多其他问题。 -
但你可能想看看这个DotNetFiddle
标签: asp.net-mvc validation client-side-validation