2009-07-04 37 views
1

我有一個包含Html.DropDownList的頁面,它接受一個viewdata參數。問題是,當用戶點擊保存它通過調用ModelState.IsValid驗證模型,如果失敗我希望頁面顯示錯誤(這工作正常)將viewdata傳回給控制器以便與下拉列表一起使用

我的問題是,該viewdata爲下拉丟失,這意味着我不知道是什麼狀態列表框是被驗證了之前的錯誤(有一個Ajax調用,允許添加,從列表中減去的東西 - 阿恩這個工作正常隔離)

編輯 - 正如下面在答覆答案中所討論的那樣:實際上我需要整個列表框。當前選擇的值不是必需的。基本上,該列表包含未被標記爲文章的作者。當用戶添加一個作者的Javascript函數將其從列表中刪除並將其添加到我可以跟蹤的文本框中。我的問題是,我似乎無法獲得列表框的當前狀態(我欣賞視圖狀態在請求結束時實際上已丟失) - 結束編輯(希望這可以使其更清晰)

代碼如下:

在編輯頁面

${Html.DropDownList("AuthorsDropDown")} <input type="button" onClick="removeOptions(Authors)"; value='Add author to article' /> 

在上攢動

控制器

public ActionResult Edit(Article form) 
    { 
     var articleList = articleMapper.MapForLists(form); 
     var authorList = new AuthorRepository().FindAll(); 
     foreach (var author in articleList.Authors) 
      authorList.Remove(author); 
     ViewData["AuthorsDropDown"] = new SelectList(authorList, "Id", "GetFullName"); 
     return View("Edit", articleList); 
    } 

的編輯操作

[ValidateModel(typeof (ArticleDto)), AcceptVerbs(HttpVerbs.Post), ValidateInput(false)] 
    public ActionResult Save(ArticleDto form) 
    { 
     return SaveContent(form, articleDto => RedirectToAction<NewsController>(c => c.Index(null)),PopulateIdentities); 
    } 

這是一個漫長的一週,所以我可能只是作爲一個有點慢。

感謝您花時間看

回答

0

好吧,現在我明白你想要什麼了。

那麼,事情是,lisbox,在表單提交不會發送到服務器 - 只有它選擇的值發送。所以在服務器上你不會找到項目列表。

當用戶按下提交時,您可以嘗試選擇列表框中的所有項目。

或者您可以:使用逗號分隔的ID列表保留隱藏的輸入字段。然後,當你從列表框中刪除時,你從現場移除。並且在服務器上,您將爲該操作提供一個字符串參數,並解析該參數。

PS:

我嘗試的第一個解決方案提供:

onclick='$("#remainingIds option").attr("selected","selected");' 

而且服務器 「的IList <int> remainingIds」 把所有的項目上。它應該做的伎倆。

+0

感謝您的回答,我需要整個列表框回來。當前選擇的值不是必需的。基本上,該列表包含未被標記爲文章的作者。當用戶添加一個作者的Javascript函數將其從列表中刪除並將其添加到我可以跟蹤的文本框中。 我的問題是,我似乎無法得到列表框的當前狀態返回 – 2009-07-05 08:55:28

相關問題