我正在编写我的第一个ASP.NET MVC 4应用程序,并且正在努力弄清楚我所做的是否是一种很好的做法,过度杀戮或者只是简单的愚蠢。
我知道有一百万种方法可以做,但只是寻找一些最佳实践指导。
基本上我的索引视图呈现一个简单的表单,在POST上我创建了一个PDF,将它存储在会话和ViewBag中并将其传递给Confirm操作。所有的确认操作都用于显示视图(Confirm.cshtml)。
任何人都可以在这里指导我吗?
控制器
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(FormCollection formCollection)
{
// Create PDF
var doc = new Document();
MemoryStream memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);
doc.Open();
doc.Add(new Paragraph("First Paragraph"));
doc.Add(new Paragraph("Second Paragraph"));
doc.Close();
byte[] docData = memoryStream.GetBuffer(); // get the generated PDF as raw data
// create id and store data in Session
var id = Guid.NewGuid().ToString();
Session[id] = docData;
// store the id in ViewBag
ViewBag.id = id;
return View("Confirm");
}
// Handles the /Home/Confirm view
public ActionResult Confirm()
{
return View();
}
public ActionResult Download(string id)
{
var docData = (byte[]) Session[id];
if (docData == null) {
return HttpNotFound();
}
Session[id] = null;
return File(docData, "application/pdf", "test.pdf");
}
}
查看
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Confirm</title>
</head>
<body>
<div>
<a href="/Home/Download?id=@ViewBag.id">Download PDF</a>
</div>
</body>
</html>
答案 0 :(得分:3)
从MVC的角度来看:
使用ViewModel是一个很好的练习,请看一下本教程。
一些优势:
视图模型将视图与模型类隔离开来,并允许模型独立于视图进行演化。
这样可以在视图模板中启用类型安全,编译时检查和编辑器智能感知。
安全性,如果您将对象直接从ORM暴露给View,则可以操纵IsAdmin等属性,使用View Models可以限制它。
我会在Index Post Action中更改
return View("Confirm");
要:
return RedirectToAction("Confirm");
监守:
发布/重定向/获取(PRG)是一种Web开发设计模式,可防止一些重复的表单提交