我的問題是非常相似,這一個MVC Rest and returning views但答案是不是爲我工作。我使用(http://restfulrouting.com/)在我的MVC應用程序中實現了Restful Routing。MVC寧靜的路由,並返回查看
當我要添加新記錄的網址是:
localhost/operations/1/exhibits/new
這就要求其返回New.cshtml作爲包含表單視圖的新動作。當用戶提交表格並在展品控制器上成功調用創建操作時。
如果模型狀態有錯誤,我想通過使用輸入的日期仍然存在回返回到新建視圖,並顯示錯誤消息(尚未實施)。
目前
return View("New", model)
發回的數據,並呈現了「新」的觀點,但網址更改爲:
/localhost/operations/1/exhibits
我檢查了路由值和返回的行動仍是「創建」。我有由動作和控制器值驅動的導航鏈接,而不正確的url意味着這些導航鏈接無法正確呈現。
控制器
public class ExhibitController : Controller
{
public ActionResult Index()
{
CreateExhibitViewModel model = new CreateExhibitViewModel();
return View(model);
}
public ActionResult New()
{
return View();
}
[HttpPost]
public ActionResult Create(MyModel model)
{
if(!ModelState.IsValid)
{
return View("New", model")
}
// Process my model
return RedirectToAction("Index");
}
}
查看
@model RocketBook.Web.ViewModels.Exhibit.CreateExhibitViewModel
@{
Html.HttpMethodOverride(HttpVerbs.Put);
ViewBag.Title = "Operation " + ViewBag.OperationName;
}
<div class="panel panel-default">
<div class="panel-heading">
<h4>New Exhibit</h4>
</div>
<div class="panel-body">
<div class="col-lg-6 form-horizontal">
@using (var form = Html.Bootstrap().Begin(new Form("create", "exhibit").Id("newexhibit").Type(FormType.Horizontal).FormMethod(FormMethod.Post).WidthLg(4)))
{
@Html.AntiForgeryToken()
<fieldset>
<legend>Details</legend>
@Html.HiddenFor(m => m.OperationID)
@Html.HiddenFor(m => m.JobID)
@form.FormGroup().TextBoxFor(m => m.Barcode)
@form.FormGroup().TextBoxFor(m => m.ExhibitRef)
@form.FormGroup().TextBoxFor(m => m.ExhibitDescription)
@form.FormGroup().DropDownListFor(m => m.ClassificationGroupID, Model.ClassificationGroups).OptionLabel("")
@form.FormGroup().DropDownListFor(m => m.ClassificationID, Model.Classifications).OptionLabel("")
@form.FormGroup().DropDownListFor(m => m.ExhibitPriority, Model.EntityPriorities).OptionLabel("")
</fieldset>
<hr />
@(form.FormGroup().CustomControls(
Html.Bootstrap().SubmitButton().Style(ButtonStyle.Primary).Text("Add Exhibit")))
}
</div>
</div>
</div>
好吧我把Url.Action連接成一個鏈接,然後用Javascript回發。我仍然得到和我原來的問題完全一樣的行爲。再想一想? – oceanexplorer
啊我明白你的意思,這是Restful Routing的預期行爲。你不能指望它進入/新的狀態,因爲國家在**職位**行動中停了下來。 Rails可以做同樣的事情。 –