我有一个简单的 MVC 应用程序,它从用户那里检索数据库服务器、数据库、用户名和密码以存储在 XML 文件中。我想在屏幕上添加一个“测试连接”按钮,并让它在控制器上执行一个名为 TestConnection 的方法。问题是 TestConnection 方法在单击时重置屏幕上的所有信息,因为返回的视图没有模型。(因为正在发生 GET 操作)。这是我的代码:
从控制器(命名FrameworkConfigurationController.cs
)
public ActionResult TestConnection()
{
return View("Index");
}
[HttpPost]
public ActionResult TestConnection(FrameworkConfigurationViewModel viewModel)
{
// TODO: Test will occur here
viewModel.DbConnectionMessage = string.IsNullOrEmpty(viewModel.DatabaseName) ? "Connection unsuccessful" : "Connection successful";
return View("Index", viewModel);
}
从我的观点(FrameworkConfiguration/Index
):
@model Framework.ViewModels.FrameworkConfigurationViewModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>FrameworkConfigurationViewModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ServerName)
</div>
@* Edited for brevity *@
<button type="submit" onclick="location.href='@Url.Action("TestConnection")'">
Test Connection</button>
@Html.ValueFor(model => model.DbConnectionMessage)
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to Dashboard", "Index", "Home")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
诚然,我是 MVC 编程的新手。我来自 Silverlight/MVVM 背景,所以这个概念对我来说并不陌生……网络编程的不连贯性是。我已经遵循了一些教程,但似乎没有一个涵盖这种类型的东西——每个例子都是人为的。我知道如何使用 webforms 和代码隐藏来做到这一点,但我想用 MVC 来完成这个。
有没有办法“强制”POST操作而不是GET?我的印象是
<button type="submit">
做到了。也许我写的 onclick 的实现是不正确的。我确信这是 HTML 101 的东西,但我似乎找不到一个简单的答案。
谢谢你的尽心帮助,
杰森