2013-04-02 66 views
0

我一直在尋找SO和谷歌一個多星期了,仍然無法找到工作答案。希望有人能幫助我。查看不傳遞數據到控制器

我正在與asp.net(實體框架+剃刀)項目工作,我想'添加兩個模型的意見。它使用editorFor()完美展示。現在問題是有些部分沒有將信息傳遞給控制器​​。

在這種情況下,每個練習都得到了一些答案。這是我的練習模式:

Table("Exercise")] 
public class ExerciseModel 
{ 

    [Key] 
    public int ExerciseId { get; set; } 

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

    [Required] 
    public List<AnswerModel> Answers { get; set; } 

而且這個answermodel:

[Table("Answer")] 
public class AnswerModel 
{ 
    [Key] 
    public int AnswerId { get; set; } 

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

的觀點存在了兩個部分,演習部分(工作一個),答案的一部分。我想在exercisemodel的列表中添加更多答案。我嘗試過不同的方式。編輯器模板,部分視圖等

這是觀點: 您可以創建一個新問題並使用Jquery隨時添加答案。我想創建的是,我可以在exercisemodel中將答案發布到該列表中。

@using (Html.BeginForm("CreateQuestion", "Admin", FormMethod.Post)) 
{ 
@Html.ValidationSummary(true) 

//will be changed 
@Html.Partial("_PartialCreateExercise") 

//this shows the answers form 
<div style="display: none;" id="new"> 
    <div class="editor-field"> 
      @Html.EditorFor(m => m.Answers); 
    </div> 
</div> 



<p> 
    <input name="command" type="button" id="add" value="add new answers" /> 
</p> 
<p> 
    <input name="command" type="submit" value="Create" /> 
</p> 
} 

這可以工作,但是當我提交頁面時,exerciseModel中的List(類型AnswerModel)仍然是空的。最後的答案編輯模板:

@model Academy.Models.AnswerModel 
@{ 
Layout = null; 
} 


<h2>Answer</h2> 
<p> 
    @Html.LabelFor(model => model.Answer) 
    @Html.EditorFor(model => model.Answer) 
</p> 



The jQuery: 
$(document).ready(function() { 
    $("#add").click(function() { 
     $('#add').after($("#new").html()); 
     $('#new').css("Display", "block"); 
    }); 
}); 

它並沒有做太多,並在那裏很多嘗試,所以它變得凌亂。但是在使用調試模式時,ExerciseModel中的List是空的,也是AnswerModel。

所以問題是,發佈表單時,ExerciseModel中的List仍然是空的。由於某種原因,我無法通過編輯器模板在exercisemodel中訪問List。 (控制器不包括,因爲它現在不做很多,列表總是空的)

這一直讓我忙了一個禮拜,希望有人能幫助我嗎?

+0

你可以發佈你的控制器嗎? –

+0

我添加了應該做處理的控制器方法。這有點亂,對此很抱歉。試了很多。但是當使用調試器時,ExerciseModel中的List就像AnswerModel本身一樣是空的。正如我所說,我上週嘗試了很多。 –

回答

1

我懷疑罪魁禍首就在於你的jQuery代碼,它應該動態地添加新的答案。你沒有顯示它,所以很難說出它可能有什麼問題。

你應該小心的是輸入字段的命名約定。 Phil Haack在his blog post中說明了這個約定。

基本上有2種的方法來動態地添加新元素(被點擊時#btnadd):

  1. 發送AJAX調用一個控制器動作,這將返回一個包含烯空模板的局部視圖。命名約定應該再次得到尊重。這裏的難點在於索引。由於命名約定允許您使用非順序索引(再次閱讀Phil Haack博客文章),最簡單的方法就是使用Guids作爲索引。史蒂文桑德森在his blog post中說明了這個概念,甚至還展示了一個自定義的Html.BeginCollectionItem幫手,它確實如此。

  2. 純粹在客戶端執行。例如,您可以使用諸如knockoutjs之類的框架。史蒂文桑德森再次在his blog post中說明了這個概念。

所以基本上這取決於你選擇你喜歡的方法。但是,無論您在提交表單時選擇了哪種方法(如果您沒有遵守Answers的輸入字段的命名約定),您在控制器操作中的所有內容都將爲空。

+0

謝謝,現在就讀它。還添加了我的簡單Jquery功能。 –

+0

是的,問題似乎在你的jQuery代碼中,你永遠不會增加輸入字段名稱中的索引。 –

+0

我明白你在說什麼,但我不知道該怎麼做。你能幫我一下嗎? –

相關問題