0

フォームを含む部分ビュー「CreateJobLine.cshtml」があります。このフォームを @Html.Action メソッドを使用してレンダリングすると、フォーム タグのないフォーム フィールドが作成されます。私はHtml.BeginFormを使用し、フォームをハードコーディングしました(以下)が、どちらの状況でもタグを生成しません。また、jqueryui のダイアログ ウィジェットを使用してフォームを表示しています。

---部分図 ---

//filename: CreateJobLine.cshtml
@model Recruitment.Models.JobLine
@if(false){
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}
<div id="addnewjoblinediv">
<form id="createjoblineform" action="@Url.Action("CreateJobLine")" method="post">
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>JobLine</legend>
        @Html.Hidden("job_id", Model.JobId)
        <div class="editor-label">
            @Html.LabelFor(model => model.Description)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Description)
            @Html.ValidationMessageFor(model => model.Description)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.TimeSpent)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.TimeSpent)
            @Html.ValidationMessageFor(model => model.TimeSpent)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.JobId)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.JobId)
            @Html.ValidationMessageFor(model => model.JobId)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
</form>   
</div>

編集ビューでは、Html.Action を呼び出して部分ビューを読み込みます。

---ビューの編集---

//filename Edit.cshtml
... 
@Html.Action("CreateJobLine", "Job", new { job_id = Model.Job.JobId})

    <a id="addnewjoblinelink" href="#">Add New JobLine</a>

</fieldset>
}

<script type="text/javascript">
    $(document).ready(function () {
        $("div#addnewjoblinediv").dialog({ autoOpen: false, modal:true, width:550, title:"Add New JobLine"});

        $("a#addnewjoblinelink").click(function () {
            $("div#addnewjoblinediv").dialog("open");
        }
        );
    }
    );

</script>

ここにコントローラーがあります ---ジョブコントローラー---

//JobController.cs
...
[HttpGet]
    public PartialViewResult CreateJobLine(int job_id)
    {
        var jobline = new JobLine();
        jobline.JobId = job_id;
        jobline.TimeSpent = 0;
        return PartialView(jobline);
    }

    [HttpPost]
    public ActionResult CreateJobLine(JobLine jobline)
    {

        if (ModelState.IsValid)
        {
            db.JobLines.Add(jobline);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return RedirectToAction("Edit", new { id = jobline.JobId });
    }
  ...

/Job/CreateJobLine/5 への呼び出しは、すべてのフォーム要素を含むフォーム コンテンツを取得しますが、フォーム タグ自体がありません。JobLine を作成できるように、そのフォーム アクションを /Job/CreateJobLine ポスト メソッドに設定したいと考えています。

ありがとうございました。

4

1 に答える 1

0

あなたの問題は@Html.Actionだと思います。次のように部分的なビューをレンダリングするだけの方が簡単で、より近いと思います。

@{ Html.RenderPartial("CreateJobLine", new MvcApplication1.Models.JobLine { JobId = 10 }); }

通常のようにRenderPartialを使用すると、フォームがダイアログ内で正しくレンダリングされるためです(残りのコードはすべて、投稿した方法です)。あなたが投稿したコードでは Html.Action を使用できません (おそらく他の何かを省略したため)。それは、あなたの問題がそのメソッドの周りにあることを示しています。幸運を。

于 2012-07-03T02:54:03.060 に答える