【发布时间】:2020-10-19 02:16:37
【问题描述】:
我正在尝试在提交表单后重新填充我的输入字段(使用 HttpPost)。有没有一种简单的方法可以做到这一点?我有一个下拉列表和一个文本框,其中填充了数据库中的数据。它们在控制器中都有自己的函数来处理数据流。我的目标是在提交后让最后创建的数据出现在输入字段中。
我的模特
public int ID { get; set; }
public string bookName { get; set; }
public string Author { get; set; }
我的观点
<form method="post" asp-controller="Home" asp-action="Home" role="post">
<div class="form-group">
<label asp-for="bookName"></label>
<select name="bookName" asp-items="@(new SelectList(ViewBag.message, "ID", "bookName"))">
</select>
</div>
<div class="form-group">
<label asp-for="Author"></label>
<input asp-for="Author" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Submit" class="btn btn-primary" />
</div>
</form>
我的控制器
public void GetBooksDDL()
{
List<BookModel> bookName = new List<BookModel>();
bookName = (from b in _context.BookModel select b).ToList();
bookName.Insert(0, new BookModel { ID = 0, bookName = "" });
ViewBag.message = bookName;
}
[HttpPost("[action]")]
[Route("/Home")]
[Produces("application/json")]
public async Task<IActionResult> Home()
{
if (textbox != "")
{
//do all the submit actions
//after all of the actions are complete return the view:
GetBooksDDL();
return View();
}else
{
return Error;
}
}
我知道我可以在 View() 中传入模型,但值始终为空。我试图将我的(BookModel 模型)作为参数传入 HttpPost,但我得到了 415 状态。
【问题讨论】:
-
在 post 操作方法中,您应该再次创建模型对象并将其传递给视图。
-
@Rena,嗨 Rena,感谢您的回复!它对我的问题没有多大帮助。我只使用一个模型,它包含 2 个字符串和一个 int(主键)。我收到这个问题,说尝试在我的 httppost 上设置 viewbag(重置下拉列表)时,模型不能变成 IEnumerable。我应该声明我确实希望最后创建的项目在提交后出现在字段中。谢谢!
-
嗨@BeeSwift,你的文本框是什么?使用你的代码我无法得到这样的错误。提交后如何维护最后创建的项目,请参阅我的更新。
-
我的回答对您有帮助吗?还有其他问题吗?
-
嗨@Rena,感谢您的更新回复。设置 List
bookName = new List (); 时遇到问题。错误提示“无法在此范围内声明名为 'bookName' 的本地或参数,因为该名称用于封闭本地范围以定义本地或参数”
标签: c# asp.net-core model-view-controller razor input