Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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
C# MVC提交isn';t返回所有数据_C#_Asp.net Mvc 3 - Fatal编程技术网

C# MVC提交isn';t返回所有数据

C# MVC提交isn';t返回所有数据,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我正在编写一个MVC应用程序,它最终访问一个SQL数据库。在我的编辑页面上,我以前拥有模型中所有可编辑的项目。最近我被要求不再允许用户编辑主键。我做了一个快速更改,将主键字段(在本例中,有两个)从EditorFor更改为DisplayFor。新的观点是: @model App.Data.Item @{ ViewBag.Title = "Edit"; } <h2>Edit</h2> @using (Html.BeginForm()) { @Html.An

我正在编写一个MVC应用程序,它最终访问一个SQL数据库。在我的编辑页面上,我以前拥有模型中所有可编辑的项目。最近我被要求不再允许用户编辑主键。我做了一个快速更改,将主键字段(在本例中,有两个)从EditorFor更改为DisplayFor。新的观点是:

@model App.Data.Item
@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Item</h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            <strong>ID:</strong>
            <div class="col-md-10">
                <p>@Html.DisplayFor(model => model.ID)</p>
            </div>
        </div>

        <div class="form-group">
            <strong>ID2:</strong>
            <div class="col-md-10">
                <p>@Html.DisplayFor(model => model.ID2)</p>
            </div>
        </div>

        <div class="form-group">
            <strong>Description:</strong>
            <div class="col-md-10">
                <p>@Html.EditorFor(model => model.Description)
                @Html.ValidationMessageFor(model => model.Description)</p>
            </div>
        </div>

        <br />
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <button type="submit" class="btn btn-primary">Submit <i class="fa fa-caret-right"></i></button>
            </div>
        </div>
    </div>
}
最后,我的数据模型:

public class Item
{
    public int ID { get; set; }
    public string ID2 { get; set; }
    public string Description { get; set; }
}

为什么不再将数据传递回第二个函数,如何使其正确传递,以便将其保存到数据库?

您需要为要返回的项生成一个输入元素。当前,仅显示两个模型图元,并且没有与它们关联的输入。因此,它们将不会被发回服务器

要使它们发布到服务器,而不是从文本框“可编辑”,请为需要返回的每个项目添加一个
Html.HiddenFor()
helper

   <div class="form-group">
        <strong>ID:</strong>
        <div class="col-md-10">
            <p>@Html.DisplayFor(model => model.ID)</p>
            <p>@Html.HiddenFor(model => model.ID)</p>
        </div>
    </div>

    <div class="form-group">
        <strong>ID2:</strong>
        <div class="col-md-10">
            <p>@Html.DisplayFor(model => model.ID2)</p>
            <p>@Html.HiddenFor(model => model.ID)</p>
        </div>
    </div>

ID:
@DisplayFor(model=>model.ID)

@Html.HiddenFor(model=>model.ID)

ID2: @DisplayFor(model=>model.ID2)

@Html.HiddenFor(model=>model.ID)


但是,请记住,任何人都可以使用Firebug或Chrome控制台工具编辑HTML,并为任何字段提交他们想要的任何值,即使您不想更改它。确保在持久化对数据库的更改时,不会将这些字段作为更新的一部分。

请在这行代码之前尝试以下操作:

@Html.DisplayFor(model => model.ID)
放入此文件进行调试:

@Html.LabelFor(model => model.ID)
告诉我们你看到了什么

如果看到标签,请检查控制器,特别是它在post上的参数。根据您的模型,它应该采用Item和Item类型的项


在控制器接收数据之前,MVC必须尝试填充数据。。。它将名称/值对转换为具有值的模型类型。如果您在控制器中之后没有看到任何数据,通常是因为找不到名称

使用
@Html.HiddenFor()
包含隐藏字段,以便它们发回,或者最好创建一个只包含要编辑的属性的视图模型,然后在发回时,获取数据模型并根据视图模型的属性进行更新。注意,您不需要我不知道的
Bind
属性。而且,我想我需要绑定。这是为了什么?在你的情况下,你是发回,并希望绑定所有属性。您将只使用
Bind
,如果您只想绑定到您发布回的一些属性,那么如果您使用
[Bind(Include=“ID,ID2”)]
,那么为
Description
发布回的内容将被忽略,并且不会绑定到您的模型。哦。我也不知道。再次感谢。这不是答案。如果您需要更多信息,请使用问题下方的注释部分。我想使用注释中不可用的格式选项来帮助用户。不,这不是答案,这是一个调试点,将导致答案。想法?我没有考虑DisplayFor不会发回的事实。相反,我试图追踪该属性在视图中是否具有约束力。我过去也没有使用过“For”属性,并且在回发邮件时丢失了数据。谢谢。我不知道希登福。
@Html.LabelFor(model => model.ID)