【发布时间】:2017-12-02 00:00:51
【问题描述】:
以下代码可以按我的需要工作:
@using (Html.BeginForm("LOLOL", "PATIENT", null))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>PATIENT</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</fieldset>
<p>
<input type="submit" value="SUBMIT" />
</p>
}
在 LOLOLController 中:
[HttpPost]
public IActionResult LOLOL(Patient p) {
var client = new MongoClient("mongodb://localhost:27017");
var userId = _userManager.GetUserId(HttpContext.User);
string db_name = "test" + userId;
var database = client.GetDatabase(db_name);
var collection = database.GetCollection<BsonDocument>("patients");
var filter = Builders<BsonDocument>.Filter.Eq("Name", p.Name.ToString());
var document = collection.Find(filter).First();
// I'm cutting short the rest of the code, because when I do something
// similar later, "collection.Find(filter).First()" fires an exception, I'll
// explain..
return View(p);
}
我有一些相当于去掉 HTML 中的 fieldset 元素,基本上只在“Html.BeginForm”中留下一个按钮,但是数据显然没有正确绑定,我知道这是因为如果我只有一个按钮并且没有数据输入,我单击按钮,然后我收到一条错误消息,指出无法从数据库中找到数据。 (编辑:我现在已经确认这确实是因为 Patient 对象没有像我预期的那样传递给控制器,似乎是在调用 html.beginform 时创建了一个全新的 Patient 对象......我想也许旧的 Patient 对象正在被传递,所以每次我们使用 Html.BeginForm 时我都不必输入它的所有数据成员)
总而言之,我想填写一个文本框,单击一个按钮以加载新页面并显示该文本框的值,但该值也基本上保持在会话状态中,所以如果我调用另一个 Html.BeginForm 函数并进入第三个视图,第一个视图中的文本将显示在第三个视图中,即使我不必在第二个视图中键入它的值。 希望我可以重复这个过程,本质上是加载一个类的数据成员,每个数据成员有一个视图。
【问题讨论】:
标签: asp.net-mvc