首先,设计您想要的每个页面及其输入字段。然后可以定义视图模型、控制器和相应的视图。它可能看起来像这样(过于简单化):
视图模型:
public class Button
{
public string Text { get; set; }
public string Controller { get; set; }
}
public class Page
{
public string Header { get; set; }
public IEnumerable<Button> Buttons { get; set; }
}
public abstract class BaseViewModel
{
public Page Page { get; set; }
}
public class Page1ViewModel : BaseViewModel
{
}
public class Page2ViewModel : BaseViewModel
{
}
...
public interface IPagesRepository
{
Page ReadPage(string pageName);
}
下面是页面控制器的外观:
public class Page1Controller : Controller
{
private readonly IPagesRepository _repository;
public Page1Controller(IPagesRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
var model = new Page1ViewModel();
model.Page = _repository.ReadPage("page1");
return View(model);
}
[HttpPost]
public ActionResult Index(Page1ViewModel model, string redirectTo)
{
if (!ModelState.IsValid)
{
return View(model);
}
return Redirect(redirectTo);
}
}
最后一部分是相应的观点:
<script type="text/javascript">
$(function () {
$('.nav a').click(function () {
$('form :hidden[name=redirectTo]').val(this.href);
$('form').submit();
return false;
});
});
</script>
<h2><%: Model.Page.Header %></h2>
<%: Html.ValidationSummary() %>
<% using (Html.BeginForm()) { %>
<%: Html.Hidden("redirectTo") %>
<% } %>
<div class="nav">
<%: Html.EditorFor(x => x.Page.Buttons) %>
</div>
Button.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeNs.Models.Button>" %>
<%: Html.ActionLink(Model.Text, "index", Model.Controller) %>