2014-12-19 41 views
0

我有一個網頁,其中列出所有國家以表格形式和觀點有像下面的模型:
客戶端驗證不工作的引導模式在MVC視圖

@model IEnumerable<Country> 

在同一頁上我有一個鏈接它允許用戶通過一個模式彈出(即頁面內定義)

<a operation="add" id="btnNewCountry" data-toggle="modal" data-target="#myModal" href="#">Add New Country</a> 

型號彈出片段看起來像下面創建一個新的國家:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-hidden="true"> 
@using (Html.BeginForm("ManageCountry", "Admin", FormMethod.Post, new { enctype ="multipart/form-data" })) 
{ 
<label for="module-text">Country Name</label> 
<input type="text" id="txtName" name="name" /> 

<button type="submit" class="btn btn-primary">Save changes</button> 
} 

只要用戶按下提交按鈕,控件就會快速到達控制器操作。

現在面臨的挑戰是,我無法弄清楚如何在國家或地區名稱的文本框應用客戶端驗證「添加新的國家」彈出的(像@ Html.ValidationMessagefor要求)模式的頁面(IEnumerable)不同於Modal Popup(僅適用於單個國家對象)

請幫忙!!

+1

爲什麼你有'

+0

謝謝Stephen..let我嘗試..我會很快回到這與結果 – CuriousBuddy

+0

謝謝噸,絕對的解決方案..不知道我怎麼不能在那個方向思考。 – CuriousBuddy

回答

0

首先,你需要確保你已經包括了客戶端驗證框架將包:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
        "~/Scripts/jquery-{version}.js", 
        "~/Scripts/jquery.validate.js", 
        "~/Scripts/jquery.validate.unobtrusive.js",")); 

然後你可以使用的[必需]註釋你的財產是這樣的:

[Required] 
public string CountryName {get; set;} 

現在你可以使用:

@Html.ValidationMessageFor(x => x.Model.CountryName) 

顯示錯誤我視圖中的細節。

編輯:

如果瀏覽器支持HTML5,你也可以只使用 '所需= 「」' 是這樣的:

<input type="text" name="CountryName" required=""> 

編輯:基於您的評論

,我會建議您使用ViewModels。無需任何映射最簡單的方法,就是讓這樣的視圖模型:

[Required] 
public List<Country> Countires { get; set; } 

而在你的控制器,你可以將數據綁定到視圖模型像這樣:

//This is the call, that returns an IEnumerable 
var countries = _repository.GetCountries().ToList(); 

var viewModel = new ViewModel(){ 
    Countries = countries, 
} 

這樣,你不在視圖中直接使用EF查詢。

+0

如果這不工作 - 你可以檢查你的瀏覽器控制檯查看頁面上是否有腳本錯誤? – MichaelCleverly

+0

我知道上面的方法,問題是我的網頁上的模型是IEnumerable 所以我不能綁定CountryName那樣 – CuriousBuddy

+0

編輯我的答案。 – MichaelCleverly