<%: Html.EditorFor(model => model.date)%>
如何在加载时使此代码显示为空文本框? Model.date不可为空,因此始终显示非空值。如何强制它以空值开始?
注意:我不想让它可以为空,因为在实际代码中,它绑定到一个必须具有值的模型属性(BTW,我对该属性有一个Required
数据注释)。让它可以为空是没有意义的。以今天的默认日期替换它不是一种选择,因为这种情况下的要点是确保用户不要忘记主动指定日期。
TIA。
答案 0 :(得分:8)
问题是,如果Model.Date属性不可为空,那么它将始终具有值。在过去,我为DateTime创建了一个编辑器模板(它也使用了jquery日期选择器)。这允许您处理您的空值,您可能希望找到等于DateTime.MinValue的日期。
所以你的编辑器模板看起来像是:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<%=Html.TextBox("", (Model != DateTime.MinValue ? Model : string.Empty)) %>
你不必担心名字的空字符串,因为这实际上只填充了html前缀,这应该足够了。
本文还介绍了如何创建编辑器模板。
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
我个人认为我的视图模型中的DateTime可以为空,但在我的域模型中没有使用之间的验证
答案 1 :(得分:2)
在您的模型中创建一个兄弟属性并使用required:
进行装饰$(".upvote-counter")
在您的视图中,将输入替换为:
$(document).ready(function () {
var $downvoteCount = 0;
var $upvoteCount = 0;
$(".upvote").click(function () {
$upvoteCount++;
$(this).find(".upvote-counter").text(" " + $upvoteCount);
var $totalVoteCount = $upvoteCount + $downvoteCount;
var $upvoteProportion = Math.round(($upvoteCount / $totalVoteCount) * 100);
var $downvoteProportion = Math.round(($downvoteCount / $totalVoteCount) * 100);
if (($upvoteProportion + $downvoteProportion) > 100) {
$(this).width(($upvoteProportion - 0.5) + "%");
$(this).closest('voting-bar-container').find(".downvotes").width(($downvoteProportion - 0.5) + "%");
} else {
$(this).width($upvoteProportion + "%");
$(this).closest('voting-bar-container').width($downvoteProportion + "%");
}
});
$(".downvote").click(function () {
$downvoteCount++;
$(this).find(".downvote-counter").text(" " + $downvoteCount);
var $totalVoteCount = $upvoteCount + $downvoteCount;
var $upvoteProportion = Math.round(($upvoteCount / $totalVoteCount) * 100);
var $downvoteProportion = Math.round(($downvoteCount / $totalVoteCount) * 100);
if (($upvoteProportion + $downvoteProportion) > 100) {
$(this).closest('voting-bar-container').find(".upvotes").width(($upvoteProportion - 0.5) + "%");
$(this).width(($downvoteProportion - 0.5) + "%");
} else {
$(this).closest('voting-bar-container').find(".upvotes").width($upvoteProportion + "%");
$(this).width($downvoteProportion + "%");
}
});
});
答案 2 :(得分:0)
我会将其放入<td>
或<div>
,然后使用id属性访问并通过jquery将其清空。
<script type="text/javascript">
$(document).ready(function(){
$("#clearme").html("");
});
</script>
<div id="clearme">
<%: Html.EditorFor(model => model.date)%>
</div>
可能有一种使用内置MVC功能的方法,但我不知道。
Here是一个快速的小提琴,向您展示这个概念,所以如果您愿意,可以随意使用它。
答案 3 :(得分:0)
对Jorge的答案进行了一些更正:
public DateTime DOB { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime? NullableDOB
{
get => DOB.ToNullable();
set => DOB = value.DefaultIfNull();
}
ToNullible()
,DefaultIfNull()
和IsNull()
是一个方便的扩展功能:
public static T? ToNullable<T>(this T source) where T : struct
=> source.IsNull(default(T)) ? (T?)null : source;
public static T? ToNullable<T>(this T source, T @default) where T : struct
=> source.IsNull(@default) ? (T?)null : source;
public static T DefaultIfNull<T>(this T? source, T @default) where T : struct
=> source ?? @default;
public static T DefaultIfNull<T>(this T? source) where T : struct
=> DefaultIfNull(source, default(T));
public static bool IsNull<T>(this T source) where T : struct
=> source.Equals(default(T));
答案 4 :(得分:-1)
您可以使用小型jquery函数。
我这样解决了我的问题:
@if(Model.HolidayDate <= DateTime.MinValue) { @Html.TextBoxFor(model => model.HolidayDate, new { @class = "datepick", @style = "width: 75px;", @id="dataInput"}) } else { @Html.TextBoxFor(model => model.HolidayDate, new { @class = "datepick", @style = "width: 75px;"}) }
并在页面的末尾:
$(function(){ $( '#DataInput中的')VAL( '')。 });