【发布时间】:2019-04-13 19:29:45
【问题描述】:
我对 ASP.NET 和 MVC 还很陌生,目前正在尝试以下方法:
- 模型:表单的属性
- 查看:向用户显示表单
- 控制器:
- 行动:做点什么
- 返回初始视图并向用户显示值
使用普通的 html,我可以正常工作。到目前为止,使用 razor 语法,我无法在提交表单后重新显示值。
我的模特:
namespace MyModels
{
public class SubmitTicketFormModel
{
[DisplayName("First Name")]
public string _firstName { get; set; }
[DisplayName("Last Name")]
public string _lastName { get; set; }
}
}
我的观点:
@model MyModels.SubmitTicketFormModel
@{
ViewData["Title"] = "SubmitTicketView";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Request</h1>
@using (Html.BeginForm("SubmitTicketAction", "SubmitTicketContoller", FormMethod.Post))
{
<div class="form-group">
@Html.LabelFor(model => model._firstName)
@Html.TextBoxFor(model => model._firstName, new { @class = "form-control" })
@Html.LabelFor(model => model._lastName)
@Html.TextBoxFor(model => model._lastName, new { @class = "form-control" })
</div>
<input type="submit" value="Post comment" />
}
<table class="table table-bordered table-sm">
<thead class="thead-light">
<tr>
<th>col1</th>
<th>col2</th>
</tr>
</thead>
<tbody>
<tr>
<td>
@Model._firstName
</td>
<td>
@Model._lastName
</td>
</tr>
</tbody>
</table>
控制器:
public class SubmitTicketController : Controller
{
public ActionResult SubmitTicketView()
{
var TicketInstance = new SubmitTicketFormModel();
return View(TicketInstance);
}
[HttpPost]
public ActionResult SubmitTicketAction(SubmitTicketFormModel model)
{
var NewTicketInstance = new SubmitTicketFormModel()
{
_firstName = model._firstName,
_lastName = model._lastName
};
return View(NewTicketInstance);
}
}
}
你能指导我正确的方向吗?
【问题讨论】:
-
您能补充更多信息吗?喜欢一些功能的截图?您是否尝试将数据添加到数据库,然后在网格(表)中显示值?然后在这种情况下,您必须使用
RedirectToAction方法重定向到初始视图。 -
可以添加视图名和文件夹名吗?
-
将
public ActionResult SubmitTicketAction重命名为 public ActionResult SubmitTicketView`(当然,在您的 HTML.BeginForm 语句中以相同的方式更新名称),您应该一切顺利。您没有准确地说出了什么问题,但我认为这可能是因为没有与 SubmitTicketAction 关联的视图文件。 -
我认为这应该可行,但我不确定这是一个很棒的设计。一方面,除了向您的表格添加详细信息外,它还会重新填充您的表单,因此人们很容易最终两次提交相同的数据。至少它会令人困惑。此外,如果人们回到该网站,他们应该如何在以后再次找到此信息?正常模式是保存数据,然后使用保存的 ID 作为查询字符串参数将用户重定向到“详细信息”页面 - 然后可以随时重复使用该 URL 以查看相同的项目
-
附言。你真的不需要创建 NewTicketInstance 对象。您所做的只是创建一个相同的副本,而无需添加或更改任何内容。你可以直接做
return View(model);。
标签: c# asp.net-mvc forms razor