我在當前的MVC3項目中爲我的某個模型創建了編輯器模板。該模型爲底層模式的屬性調用了正確的編輯器,但它們缺少用於驗證的不顯眼數據val- *屬性。未從模型編輯器模板發出的MVC3數據val- *屬性
我怎樣才能讓MVC發出data-val屬性?
這裏是我的模型
[MetadataType(typeof(FieldTripRouteMetadata))]
public partial class FieldTripRoute
{
private class FieldTripRouteMetadata
{
[Required]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime Date { get; set; }
[Required]
[DisplayName("Route")]
public int RouteID { get; set; }
[Required]
[DisplayName("Departure Time")]
[UIHint("TimeWithPeriod")]
[DisplayFormat(DataFormatString = "{0:h:mm tt}")]
public DateTime DepartureTime { get; set; }
[Required]
[StringLength(255)]
[DisplayName("Pickup Location")]
public String PickupLocation { get; set; }
[Required]
[StringLength(255)]
public String Destination { get; set; }
[Required]
[DisplayName("Arrival Time")]
[UIHint("TimeWithPeriod")]
[DisplayFormat(DataFormatString = "{0:h:mm t}")]
public DateTime ArrivalTime { get; set; }
public bool IsReturnRoute { get; set; }
public int FieldTripID { get; set; }
}
和我的編輯模板:
@model FieldTripRoute
@{string routeType = (Model.IsReturnRoute ? "return" : "");}
<fieldset class="[email protected](routeType)Route" style="clear: both; width: 620px; margin-right: auto; margin-left: auto;">
<legend>Add Route</legend>
<div style="float: left; width: 275px;">
<div>
<div class="editor-label">@Html.LabelFor(model => model.Date)</div>
<div class="editor-field">@Html.EditorFor(model => model.Date)</div>
<div class="validation-error">@Html.ValidationMessageFor(model => model.Date)</div>
</div>
<div>
<div class="editor-label">@Html.LabelFor(model => model.DepartureTime)</div>
<div class="editor-field">@Html.EditorFor(model => model.DepartureTime)</div>
<div class="validation-error">@Html.ValidationMessageFor(model => model.DepartureTime)</div>
</div>
<div>
<div class="editor-label">@Html.LabelFor(model => model.ArrivalTime)</div>
<div class="editor-field">@Html.EditorFor(model => model.ArrivalTime)</div>
<div class="validation-error">@Html.ValidationMessageFor(model => model.ArrivalTime)</div>
</div>
</div>
<div style="float: left;">
<div>
<div class="editor-label">@Html.LabelFor(model => model.RouteID)</div>
<div class="editor-field">@Html.DropDownListFor(model => model.RouteID, Model.EditRouteList)</div>
<div class="validation-error">@Html.ValidationMessageFor(model => model.RouteID)</div>
</div>
<div>
<div class="editor-label">@Html.LabelFor(model => model.PickupLocation)</div>
<div class="editor-field">@Html.TextBoxFor(model => model.PickupLocation)</div>
<div class="validation-error">@Html.ValidationMessageFor(model => model.PickupLocation)</div>
</div>
<div>
<div class="editor-label">@Html.LabelFor(model => model.Destination)</div>
<div class="editor-field">@Html.EditorFor(model => model.Destination)</div>
<div class="validation-error">@Html.ValidationMessageFor(model => model.Destination)</div>
</div>
</div>
<div style="clear: both; width: 100px; margin: 20px auto 0 auto;">
<input type="button" id="[email protected](routeType)Form" name="[email protected](routeType)Form" value="Add" />
</div>
</fieldset>
我的視圖模型:
public class FieldTripEditViewModel
{
public FieldTrip Trip { get; set; }
public FieldTripRoute Route { get; set; }
public FieldTripRoute ReturnRoute { get; set; }
public FieldTripEditViewModel(){}
public FieldTripEditViewModel(FieldTrip trip)
{
this.Trip = trip;
this.Route = new FieldTripRoute();
this.ReturnRoute = new FieldTripRoute {IsReturnRoute = true};
}
}
我看着this post和我所有的基地的編輯模板對應於將該名稱留爲空字符串以允許MVC生成它的想法。但我仍然沒有確認。
你檢查你的web配置爲 <添加鍵= 「ClientValidationEnabled」 值= 「真」/> <添加鍵= 「UnobtrusiveJavaScriptEnabled」 值=」 true「/> ? – torm 2012-02-13 17:17:22
是的,這已經在web.config中爲該站點啓用了。 – Philter 2012-02-13 17:38:07
我能解決它與[這篇文章](http://stackoverflow.com/questions/6657641/asp-net-mvc-3-client-validation-attributes-generation)我會發佈一個完整的解釋,當SO允許我。 – Philter 2012-02-13 17:43:01