Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 视图未将数据传递给控制器_Asp.net Mvc_Razor_Editorfor - Fatal编程技术网

Asp.net mvc 视图未将数据传递给控制器

Asp.net mvc 视图未将数据传递给控制器,asp.net-mvc,razor,editorfor,Asp.net Mvc,Razor,Editorfor,我已经在SO和google上搜索了一个多星期了,仍然找不到有效的答案。希望有人能帮助我 我正在使用asp.net(实体框架+Razor)进行一个项目,我正在尝试向视图中添加两个模型。使用editorFor()可以完美地显示它。现在的问题是某些部分没有将信息传递给控制器 在这种情况下,每个练习都会得到一些答案。这是我的练习模式: Table("Exercise")] public class ExerciseModel { [Key] public int ExerciseId

我已经在SO和google上搜索了一个多星期了,仍然找不到有效的答案。希望有人能帮助我

我正在使用asp.net(实体框架+Razor)进行一个项目,我正在尝试向视图中添加两个模型。使用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; }
该视图由两部分组成,练习部分(工作部分)和答案部分。我想在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>
}
@使用(Html.BeginForm(“CreateQuestion”,“Admin”,FormMethod.Post))
{
@Html.ValidationSummary(true)
//将会改变
@Html.Partial(“\u PartialCreateExercise”)
//这显示了答案表单
@EditorFor(m=>m.Answers);

}
这是可行的,但当我提交页面时,exercisemodel(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");
    });
});
@model Academy.Models.AnswerModel
@{
布局=空;
}
答复

@LabelFor(model=>model.Answer)
@EditorFor(model=>model.Answer)

jQuery: $(文档).ready(函数(){ $(“#添加”)。单击(函数(){ $(“#添加”).after($(“#新建”).html()); $('#new').css(“显示”、“块”); }); });
它做的不多,在那里尝试了很多,所以它变得很混乱。但是当使用调试模式时,ExerciseModel中的列表为空,AnswerModel也是空的

同样,问题是在发布表单时,ExerciseModel中的列表仍然为空。由于某种原因,我无法通过编辑器模板访问exercisemodel中的列表。(控制器不包括在内,因为它现在做的不多,列表总是空的)


这已经让我忙了一个星期了,希望有人能帮我?

我怀疑罪魁祸首就在你的jQuery代码中,这个代码应该能够动态添加新的答案。你还没有展示它,所以很难判断它有什么问题

您应该注意的是输入字段的命名约定。Phil Haack在本公约中举例说明

基本上有两种方法可以动态添加新元素(当单击
#btnadd
时):

  • 向控制器操作发送AJAX调用,该操作将返回包含空模板的局部视图。命名惯例应该再次得到尊重。这里的困难在于索引。由于命名约定允许您使用非顺序索引(再次阅读Phil Haack的博客文章),因此这里最简单的方法是使用GUID作为索引。Steven Sanderson在中演示了这个概念,甚至展示了一个定制的
    Html.BeginCollectionItem
    helper,它正是这样做的

  • 完全在客户端进行。例如,您可以使用knockoutjs之类的框架。史蒂文·桑德森再次在一篇文章中阐述了这一概念


  • 所以基本上你可以选择你喜欢的方法。但是,无论您在提交表单时选择哪种方法,如果您没有遵守答案输入字段的命名约定,您在控制器操作中得到的所有内容都是空的。

    您可以发布控制器吗?我添加了控制器方法来处理。有点乱,对不起。我试了很多。但是当使用调试器时,ExerciseModel中的列表是空的,就像AnswerModel本身一样。正如我所说,我上周试了很多。谢谢,我现在就读。还添加了我的简单Jquery函数。是的,问题似乎出在Jquery代码中,在输入字段的名称中从不增加索引。我理解你的意思,但我不知道怎么做。你能帮我一个忙吗?所有的事情都在我链接到的博客帖子中解释了。
    @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");
        });
    });