Note that there are some explanatory texts on larger screens.

plurals
  1. POget new inserted ID in MVC Controller to jQuery
    primarykey
    data
    text
    <p>I am updating an entity normally inside a controller as follows :-</p> <pre><code>[HttpPost] public ActionResult Create(Project project) { //var model = new CompositeImageModel(0); if (ModelState.IsValid) { //var model = new CompositeImageModel(project.ProjectID); db.Projects.Add(project); db.SaveChanges(); ViewBag.ProjectID = project.ProjectID; return RedirectToAction("Index"); } return View(); } </code></pre> <p>And I wish to grab this new id "ViewBag.ProjectID" inside my Jquery AJAX code :-</p> <pre><code>onSaveBegin: function () { //CODE FOR SAVE BEGIN $('#imageList').fadeIn('slow'); $("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/222"); }); }, </code></pre> <p>instead of the hardcoded "222".</p> <p>How can I get it?</p> <p>Thanks for your help and time</p> <p><em><strong></em>**<em>*</em>**<em>*</em>****</strong><em>UPDATE</em><strong><em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>***</strong> So I have updated my Jquery as follows :-</p> <pre><code>&lt;script type="text/javascript"&gt; $(document).ready(function () { var imageList = $('#imageList'), submitButt = $('#submitButt'); //hide the imageList initially imageList.hide(); //hide all but the first paragraph }); var Project = { save: function () { var projectForm = $("#projectForm"); if (projectForm.valid()) { projectForm.submit(); } else { Project.onInvalidForm(); } }, onInvalidForm: function () { //CODE FOR INVALID FORM }, onSaveBegin: function () { //CODE FOR SAVE BEGIN $('#imageList').fadeIn('slow'); }, onSaveSuccess: function () { //CODE FOR SAVE SUCCESS }, onSaveFailure: function () { //CODE FOR SAVE FAILURE alert(ViewBag.ProjectID); }, onSaveComplete: function () { //CODE FOR SAVE COMPLETE //var hfProjectId = $("#hfProjectId").val(); //$("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/" + hfProjectId); }); $("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/"+@(ViewBag.ProjectID) ); }); } }; </code></pre> <p></p> <p>I have moved the code to onSaveComplete, since I should have the ProjectID then, but still am not able to get it yet. however both options will not work.</p> <p><em><strong></em>**<em>*</em>**<em>*</em>****</strong><em>UPDATE 2 <strong></em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em></strong></p> <pre><code>@model MvcCommons.Models.Project @{ ViewBag.Title = "Create"; </code></pre> <p>}</p> <pre><code>&lt;h2&gt;Create&lt;/h2&gt; @{ Layout = "~/Views/Shared/_Layout.cshtml"; Html.EnableClientValidation(); Html.EnableUnobtrusiveJavaScript(); </code></pre> <p>}</p> <pre><code>&lt;script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"&gt;&lt;/script&gt; </code></pre> <pre><code>&lt;script type="text/javascript"&gt; $(document).ready(function () { var imageList = $('#imageList'), submitButt = $('#submitButt'); //hide the imageList initially imageList.hide(); //hide all but the first paragraph }); var Project = { save: function () { var projectForm = $("#projectForm"); if (projectForm.valid()) { projectForm.submit(); } else { Project.onInvalidForm(); } }, onInvalidForm: function () { //CODE FOR INVALID FORM }, onSaveBegin: function () { //CODE FOR SAVE BEGIN $('#imageList').fadeIn('slow'); }, onSaveSuccess: function () { //CODE FOR SAVE SUCCESS }, onSaveFailure: function () { //CODE FOR SAVE FAILURE alert(ViewBag.ProjectID); }, onSaveComplete: function () { //CODE FOR SAVE COMPLETE //var hfProjectId = $("#hfProjectId").val(); //$("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/" + hfProjectId); }); $("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/"+@(ViewBag.ProjectID) ); }); } }; </code></pre> <p></p> <p>@{ var projectID = int.Parse(ViewBag.ProjectID);<br> }</p> <p>@using (Ajax.BeginForm(<br> "/Create",<br> new { },<br> new AjaxOptions<br> {<br> InsertionMode = InsertionMode.Replace,<br> UpdateTargetId = "projectFormContainer",<br> OnComplete = "Project.onSaveComplete",<br> OnFailure = "Project.onSaveFailure", OnSuccess = "Project.onSaveSuccess", OnBegin = "Project.onSaveBegin"<br> },<br> new { id = "projectForm", name = "projectForm" }))<br> {<br> </p> <pre><code> @Html.Hidden("hfProjectId", ViewBag.ProjectID) &lt;div class="editor-label"&gt; @Html.LabelFor(m =&gt; m.ProjectTitle) &lt;/div&gt; &lt;div class="editor-field"&gt; @Html.TextBoxFor(m =&gt; m.ProjectTitle) @Html.ValidationMessageFor(m =&gt; m.ProjectTitle) &lt;/div&gt; &lt;div class="editor-label"&gt; @Html.LabelFor(m =&gt; m.ProjectText) &lt;/div&gt; &lt;div class="editor-field"&gt; @Html.TextBoxFor(m =&gt; m.ProjectText) @Html.ValidationMessageFor(m =&gt; m.ProjectText) &lt;/div&gt; &lt;p&gt; &lt;input type="submit" value="Submit" onclick="Project.save();" /&gt; &lt;/p&gt; &lt;/div&gt; } &lt;div id='imageList'&gt; &lt;h2&gt;Upload Image(s)&lt;/h2&gt; @{ Html.RenderPartial("~/Views/File/ImageUpload.cshtml", new MvcCommons.ViewModels.ImageModel((int)ViewBag.ProjectID)); } &lt;/div&gt; </code></pre> @Html.ActionLink("Back to List", "Index") <p>Code updated with latest changes</p> <p><em><strong></em>**<em>*</em>**<em>*</em>**<em>*</em>**</strong><em>UPDATED</em><strong><em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>***</strong></p> <p>Mode updates :- Change the @Html.Hidden to this now :-</p> <pre><code> @if(Model != null) { @Html.Hidden("hfProjectId", Model.ProjectID) } </code></pre> <p>The Javascript is still the same :=</p> <pre><code> onSaveComplete: function () { //CODE FOR SAVE COMPLETE var hfProjectId = $("#hfProjectId").val(); alert(hfProjectId); $("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/" + hfProjectId); }); //$("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/"+@(ViewBag.ProjectID) ); }); } </code></pre> <p>change the var projectID</p> <pre><code>@{ if (Model != null) { var projectID = Model.ProjectID; } </code></pre> <p>}</p> <p>in the controller, returning a "View", with the model</p> <pre><code> [HttpPost] public ActionResult Create(Project project) { if (ModelState.IsValid) { db.Projects.Add(project); db.SaveChanges(); ViewBag.ProjectID = project.ProjectID; //return RedirectToAction("Index"); return View("Create", project); } return View(); } </code></pre> <p>Still no luck though!</p> <p><em><strong></em>**<em>*</em>**<em>*</em>**<em>*</em>*</strong> FINAL UPDATE <strong><em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>**<em>*</em>***</strong> I have decided to create a Project View Model and try to pass variables through it, since the ViewBag was not working in my case. So I changed the HttpPost Create function in the Controller to look as follows :-</p> <pre><code> [HttpPost] public ActionResult Create(Project project) { ProjectModel viewModel = new ProjectModel(); if (ModelState.IsValid) { db.Projects.Add(project); db.SaveChanges(); viewModel.Project = project; return View("Index", viewModel); } return View(); } </code></pre> <p>However this still did not refresh the ProjectID, and so I have decided to abandon this for the time being and try to come up with a better design. However if you could see soemthign wrong that I am doing please comment on this.</p> <p>This is my final Create View :-</p> <pre><code>@model MvcCommons.ViewModels.ProjectModel @{ var projectID = Model.Project.ProjectID; </code></pre> <p>}</p> <p>@{ ViewBag.Title = "Create"; }</p> <h2>Create</h2> <pre><code>@{ Layout = "~/Views/Shared/_Layout.cshtml"; Html.EnableClientValidation(); Html.EnableUnobtrusiveJavaScript(); </code></pre> <p>}</p> <p>`</p> <p>` $(document).ready(function () {</p> <pre><code> var imageList = $('#imageList'), submitButt = $('#submitButt'); //hide the imageList initially imageList.hide(); //hide all but the first paragraph }); var Project = { save: function () { var projectForm = $("#projectForm"); if (projectForm.valid()) { projectForm.submit(); } else { Project.onInvalidForm(); } }, onInvalidForm: function () { //CODE FOR INVALID FORM }, onSaveBegin: function () { //CODE FOR SAVE BEGIN alert('onSaveBegin ' + @(projectID)); $('#imageList').fadeIn('slow'); }, onSaveSuccess: function () { //CODE FOR SAVE SUCCESS //alert('onSaveSuccess') }, onSaveFailure: function () { //CODE FOR SAVE FAILURE //alert('onSaveFailure ' + @(projectID)); }, onSaveComplete: function () { //CODE FOR SAVE COMPLETE //alert('onSaveComplete ' + @(projectID)) //$("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/"+@(projectID)); }); $("#imageList").click(function () { $("#imageList").load("/File/ImageUpload/" + hfProjectId); }); } }; </code></pre> <p></p> <pre><code>@using (Ajax.BeginForm( "/Create", new { }, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "projectFormContainer", OnComplete = "Project.onSaveComplete", OnFailure = "Project.onSaveFailure", OnSuccess = "Project.onSaveSuccess", OnBegin = "Project.onSaveBegin" }, new { id = "projectForm", name = "projectForm" })) { &lt;div&gt; @*@Html.Hidden("hfProjectId", projectID)*@ @Html.Hidden("hfProjectId", Model.Project.ProjectID) &lt;div class="editor-label"&gt; @Html.LabelFor(m =&gt; m.Project.ProjectTitle) &lt;/div&gt; &lt;div class="editor-field"&gt; @Html.TextBoxFor(m =&gt; m.Project.ProjectTitle) @Html.ValidationMessageFor(m =&gt; m.Project.ProjectTitle) &lt;/div&gt; &lt;div class="editor-label"&gt; @Html.LabelFor(m =&gt; m.Project.ProjectText) &lt;/div&gt; &lt;div class="editor-field"&gt; @Html.TextBoxFor(m =&gt; m.Project.ProjectText) @Html.ValidationMessageFor(m =&gt; m.Project.ProjectText) &lt;/div&gt; &lt;p&gt; </code></pre> <p>@* *@<br> <br> </p><br> <br> }</p> <pre><code>&lt;div id='imageList'&gt; &lt;h2&gt;Upload Image(s)&lt;/h2&gt; @{ //Html.RenderPartial("~/Views/File/ImageUpload.cshtml", new MvcCommons.ViewModels.ImageModel((int)ViewBag.ProjectID)); Html.RenderPartial("~/Views/File/ImageUpload.cshtml", new MvcCommons.ViewModels.ImageModel(projectID)); } &lt;/div&gt; </code></pre> @Html.ActionLink("Back to List", "Index")
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload