Asp.net mvc 我试图从显示所述模型细节的表单返回模型,但返回空值

Asp.net mvc 我试图从显示所述模型细节的表单返回模型,但返回空值,asp.net-mvc,asp.net-mvc-3,submit,Asp.net Mvc,Asp.net Mvc 3,Submit,我的表单没有返回空模型 我在详细信息页面上查看特定模型的详细信息,然后,如果用户按下SubmitPost按钮,视图将返回该模型 查看 @model MyApp.Models.MyModel @using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post)) { <fieldset> <legend>Course</legend> <

我的表单没有返回空模型

我在详细信息页面上查看特定模型的详细信息,然后,如果用户按下SubmitPost按钮,视图将返回该模型

查看

@model MyApp.Models.MyModel
@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post))
{
    <fieldset>
        <legend>Course</legend>
        <div class="display-label">MyModel ID</div>
        <div class="display-field">
            @Html.DisplayFor(model => model.CourseID)
        </div>

        <div class="display-label">Title</div>
        <div class="display-field">
            @Html.DisplayFor(model => model.Title)
        </div>
        etc. . .

        <p><input type="submit" value="SubmitPost" /></p>

        <more misc information for the view>
    </fieldset>
}
给出一些上下文:我使用此表单允许学生查看某个类的详细信息,然后单击按钮应用于该类


关于我的模型为什么为空的任何线索?

根据您提供的示例,您似乎没有在表单中包含任何
MyModel
字段。作为测试,请尝试包含一个隐藏字段或使用
@Html.HiddenFor(model=>model.CourseID)
,查看是否有任何值发布。

根据您提供的示例,表单中似乎没有包含任何
MyModel
的字段。作为测试,请尝试包含一个隐藏字段或使用
@Html.HiddenFor(model=>model.CourseID)
,查看是否有任何值已发布。

您需要在表单中包含输入元素,以便将它们发布到控制器并绑定到控制器的模型。ASP.Net MVC中的模型绑定采用您提交的表单值,并在控制器的模型上查找具有相同名称的属性,然后尝试使用表单值设置属性。表单中没有输入字段意味着模型绑定无法粘贴到控制器的模型中

我建议使用带有css样式的只读输入元素,使其看起来像
div.display-field

    <div class="display-label">Course ID</div> 
    <div> 
        @Html.TextBoxFor(model=>model.CourseID, new{readonly="readonly", @class="display-field"}) 
    </div> 
课程ID
@Html.TextBoxFor(model=>model.CourseID,新的{readonly=“readonly”,@class=“display field”})

根据页面上的其他样式,可能需要也可能不需要将输入包装到div中。

您需要在表单中包含输入元素,以便将它们发布到控制器并绑定到控制器的模型。ASP.Net MVC中的模型绑定采用您提交的表单值,并在控制器的模型上查找具有相同名称的属性,然后尝试使用表单值设置属性。表单中没有输入字段意味着模型绑定无法粘贴到控制器的模型中

我建议使用带有css样式的只读输入元素,使其看起来像
div.display-field

    <div class="display-label">Course ID</div> 
    <div> 
        @Html.TextBoxFor(model=>model.CourseID, new{readonly="readonly", @class="display-field"}) 
    </div> 
课程ID
@Html.TextBoxFor(model=>model.CourseID,新的{readonly=“readonly”,@class=“display field”})

根据页面上的其他样式,可能需要也可能不需要将输入包装到div中。

DisplayFor
HTML帮助程序将只返回一个表示属性值的字符串。如果您的属性是布尔类型,则会将其呈现为禁用的复选框。只要你没有任何输入控件,你就不会得到值。因此,在本例中,您可以简单地使用
@Html.HiddenFor
Html助手方法

HTML.HiddenFor
Helper方法为类型为hidden的输入元素生成HTM标记,其id和名称与表达式相同

@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post))
{
   <div class="display-label">MyModel ID</div>
   <div class="display-field">
        @Html.DisplayFor(model => model.CourseID)
        @Html.HiddenFor(m=>m.CourseId)
   </div>
   <input type="submit" value="Save" />
}
@使用(Html.BeginForm(“applyusingtails”、“Controller”、FormMethod.Post))
{
MyModel ID
@DisplayFor(model=>model.CourseID)
@Html.HiddenFor(m=>m.CourseId)
}

现在,课程id的值将在HTTPPost操作方法中可用。

DisplayFor
HTML帮助程序将只返回一个表示属性值的字符串。如果您的属性是布尔类型,则会将其呈现为禁用的复选框。只要你没有任何输入控件,你就不会得到值。因此,在本例中,您可以简单地使用
@Html.HiddenFor
Html助手方法

HTML.HiddenFor
Helper方法为类型为hidden的输入元素生成HTM标记,其id和名称与表达式相同

@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post))
{
   <div class="display-label">MyModel ID</div>
   <div class="display-field">
        @Html.DisplayFor(model => model.CourseID)
        @Html.HiddenFor(m=>m.CourseId)
   </div>
   <input type="submit" value="Save" />
}
@使用(Html.BeginForm(“applyusingtails”、“Controller”、FormMethod.Post))
{
MyModel ID
@DisplayFor(model=>model.CourseID)
@Html.HiddenFor(m=>m.CourseId)
}

现在,课程id的值将在您的HTTPPost操作方法中可用。

隐藏值在显示页面的源上返回适当的值,但我仍然返回空值,是否有一个特定的位置可以放置@Html.HiddenFor。要使其工作?在
@中使用
部分应该足够了,至少可以查看您是否发布了任何值。在我处理了这里的内容后开始工作-似乎就是答案。隐藏值在显示页面的源上返回适当的值,但我仍然返回空值,是否有一个特定的地方我会把@Html.HiddenFor。要让它工作?在
@中使用
部分应该足够了,至少可以查看您是否发布了任何值。在我处理了这里的内容之后开始工作-似乎就是答案。