我有一个简单的MVC应用程序,它从用户检索数据库服务器,数据库,用户名和密码,以存储在XML文件中。我想在屏幕上添加一个“测试连接”按钮,让它在控制器上执行一个名为TestConnection的方法。问题是TestConnection方法在单击时重置屏幕上的所有信息,因为返回的视图没有模型。 (因为正在进行GET操作)。这是我的代码:
来自Controller(名为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的东西,但我似乎无法找到一个简单的答案。
感谢您提供的任何帮助,
杰森
答案 0 :(得分:2)
为什么不让“测试连接”按钮触发Ajax操作来调用控制器,并显示结果?
这样你就可以避免提交整个页面了。
如果你不熟悉细节,这里有一个关于Ajax和MVC 4入门的很好的概述