c# - 在 Controller 中创建函数的 MVC 最佳实践

标签 c# asp.net-mvc

<分区>

我仍在学习 MVC 编程,有一个问题要请您为我澄清一件事,即我的 Controller 中的 Get 和 POST ActionResult 函数。我会给你三种可能的情况(实际上是三个问题):

我的第一个场景:

public ActionResult Derp()
{
    Derpina derpina = new Derpina(); //Should I need to pass this to View?
    return View(derpina);
}

[HttpPost]
public ActionResult Derp()
{
    Derpina derpina = new Derpina();
    UpdateModel(derpina);
    //doStuff and save to DB
    return RedirectToAction("Index");
}

我的第二种情况:

public ActionResult Derp()
{
    return View();
}

[HttpPost]
public ActionResult Derp()
{
    Derpina derpina = new Derpina(); //Is this the cleanest way?
    UpdateModel(derpina);
    //doStuff and save to DB
    return RedirectToAction("Index");
}

我的第三种情况:

public ActionResult Derp()
{
    Derpina derpina = new Derpina();
    return View(derpina);
}

[HttpPost]
public ActionResult Derp(Derpina derpina)
{
    UpdateModel(derpina); //Should I need to do that at all?
    //doStuff and save to DB
    return RedirectToAction("Index");
}

我倾向于第二种情况,因为我不需要创建新实体并将其传递给 View 。我想这就是我问你们的原因,有人曾经告诉我没有“愚蠢的问题”,所以我希望你们能忍受我:)

  1. 我是否需要将新创建的 Derpina 传递给 View
  2. 第二种情况不是“最佳实践”吗?
  3. 在第三种情况下,如果我将 Derpina 作为参数传递给 HttpPost 函数,MVC 框架是否尚未更新模型?

Englis 不是我的母语,所以我希望这些问题能说明问题。无论如何,提前感谢您能给我澄清的任何帮助。

已编辑

收到一个答案后,我想添加第四个场景:

public ActionResult CreateDerp()
{
    return View();
}

[HttpPost]
public ActionResult CreateDerp(Derpina derpina)
{
    UpdateModel(derpina);
    //doStuff and save to DB
    return RedirectToAction("Index");
}

这是正确的方法吗,我的意思是如果我不需要在 GET 函数中将模型发送到 View ?例如,如果我像上面的代码建议的那样使用 Create 函数。

最佳答案

第一个问题 -> 如果您有一个 View 必须显示数据库中的数据,您需要将模型发送到 View ,以便它可以在您的页面上显示所需的数据。

第二个问题 -> 在发布时,如果不需要将模型作为发布方法中的参数,总是建议这样做,这就是模型绑定(bind)器的全部目的,应该将如何更新数据库中的数据分开在我看来,在您的应用程序的业务层中,这是最干净的方式。

第三个问题 -> mvc 框架确实创建了一个新模型,其中包含您 View 中的数据(如果用户输入任何数据),但是,这并不意味着它会自动更新您的对象或应用数据库中的更改,您必须按照您要求的方式明确地做到这一点。

我希望我至少对您有所帮助。

关于c# - 在 Controller 中创建函数的 MVC 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286121/

相关文章:

c# - MvcHtmlString.ToString 正在转义 Razor 中的文本

jquery - Ajax 向 Controller 操作发送空参数

asp.net 成员(member)资格 - 管理员批准

asp.net-mvc - asp.net mvc 2 到 mvc 4

c# - 正则表达式 - 在字符之前匹配模式

c# - Get 方法的大小

c# - LINQ:分组依据,并检索公共(public)属性

c# - Web Api 服务器端处理和数据表参数

c# - 指定的转换在 linq 查询中无效

c# - 从 XML 字符串中删除非法字符