gpt4 book ai didi

c# - 如何获得强类型 MVC View 以回发它传递的模型实例?

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:40 25 4
gpt4 key购买 nike

因此,我尝试采用我编写的 View 来创建模型的实例,并使用它来编辑数据库中的现有实例。

因此,只需通过 ID 传入现有实例就非常简单

public ActionResult Index(int id)
{
return View(EntityContext.Policies.Where(x => x.ID == id).First());
}

我遇到的问题是当表单发布时:

@using (Html.BeginForm("Index", "Save", FormMethod.Post, new { @id = "form" }))
{
<fieldset>
...
@Html.TextBox("property")
@Html.TextBoxFor("otherProperty")
...
<input id="submit" type="submit" value="Save" />
</fieldset>
}

它发布到的 Controller :

public class SaveController : Controller
{
VectorDaemonContext vdContext = new VectorDaemonContext();
//
// POST: /Save/
[HttpPost]
public ActionResult Index(Policy policy, string property, int otherProperty) {
//Stuff to do with the policy
}
}

Controller 获得一个 Policy 对象,但它只设置了我在 View 上显示并允许编辑的字段

我想要做的是让 View 发布它从原始 Controller 获得的实例。这是我可以简单地做的事情吗?

据我所知,执行此操作的最简单方法是在 View 中为策略 ID 创建一个隐藏字段,然后访问数据库以拉回原始实例。由于某些领域特定的问题,我已经不得不比我想要的更多地访问数据库,所以如果我能避免这种情况,我愿意。

最佳答案

更正:

The simplest safest way I know of to do this would be to make a hidden field on the view for the ID of the Policy, then hit the database to pull back the original instance.

如果您将整个记录发送给客户,然后允许该客户将其发回,那么即使您“不允许”他们编辑字段,您也将对该记录的完全控制权交给了客户。因为偷偷摸摸的客户可以绕过您的应用程序并直接发布他们想要的任何数据并更改这些字段。因此,这样做是危险且不安全的。即使您信任您的客户,这也不是一个好主意。

安全的做法是只获取您希望他们输入的字段,并将它们应用于您从数据库服务器端检索的记录。这样,只有您允许他们更新的数据才会更改。

但是,如果您受到约束并下定决心,那么执行此操作的方法是为您不希望用户看到或编辑的所有变量创建隐藏字段。如果您希望他们看到这些字段,但不能编辑,您可以使用文本框并将这些字段设置为只读(同样,用户可以绕过它,所以这不是真正的安全)。或者只显示数据并使用隐藏的输入。

Web 浏览器只会发布存在于表单控件中且未在表单元素中禁用的数据。 (或您在 ajax 请求中发送的数据)。因此,您想要回传到服务器的任何数据都必须存在于控件中。

关于c# - 如何获得强类型 MVC View 以回发它传递的模型实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com