0

私の質問は、このMVC Rest と返されるビューに非常に似ていますが、答えがうまくいきません。( http://restfulrouting.com/ )を使用して、MVC アプリケーションに Restful Routing を実装しました。

新しいレコードを追加する場合、URL は次のとおりです。

localhost/operations/1/exhibits/new

これは、フォームを含むビューとして New.cshtml を返す New アクションを呼び出します。ユーザーがフォームを送信し、Create アクションが Exhibits コントローラーで正常に呼び出されたとき。

モデルの状態にエラーがある場合は、ユーザーが入力した日付をそのままにして新しいビューに戻り、エラー メッセージ (まだ実装されていません) を表示したいと思います。

現在のところ

return View("New", model)

データを送り返し、「新規」ビューをレンダリングしますが、URL は次のように変更されます。

/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>
4

2 に答える 2