2013-03-28 107 views
1

我在開發中遇到了一個問題。MVC 3 C#::提交表單後保留表單的值

我只是想在MVC3提交我的形式httppost方法後保留我的表單數據

我不想交任何地方後重定向,相同的形式,我想我的提交值回在各個領域

任何消化?

我在下面的方法

[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)] 
    public ActionResult PostJobAction(FormCollection PostJobForm, HttpPostedFileBase uploadfile, JobsDetailModel objLocationModel) 
    { 
     bool blnSavedResume = false; 
     // JobsBusinessComponent objJobsBusinessComponent = new JobsBusinessComponent(); 
     JobsClient objJobsBusinessComponent = new JobsClient(); 
     UserModel objUserModel = null; 
     // byte[] bytArrayResume = null; 
     string strlogoImageName = string.Empty; 
     if (uploadfile != null) //if (uploadfile != null && uploadfile.ContentLength > 1024) 
     { 
      string UserFolderName = ConfigurationManager.AppSettings["LogoPath"].ToString() + objLocationModel.InstituteName.Trim(); 

      if (!Directory.Exists(UserFolderName)) 
      { 
       Directory.CreateDirectory(UserFolderName); 
      } 

      strlogoImageName = Guid.NewGuid().ToString() + "_" + uploadfile.FileName; 
      blnSavedResume = Utility.ResizeStream(Convert.ToInt16(ConfigurationManager.AppSettings["LogoSize"]), uploadfile.InputStream, UserFolderName + @"\" + strlogoImageName); 
      //using (MemoryStream ms = new MemoryStream()) 
      //{ 
      // var filePath = System.IO.Path.GetFileName(uploadfile.FileName); 
      // Image image = Utility.ScaleBySize(Image.FromFile(uploadfile.FileName, true), 200); 
      // uploadfile.InputStream.CopyTo(ms); 
      // bytArrayResume = ms.GetBuffer(); 
      //} 
      //// byte[] bytArrayResume = uploadfile.InputStream. 


      //blnSavedResume = objJobsBusinessComponent.SaveResumeOnDisk(UserFolderName, uploadfile.FileName, bytArrayResume); 
     } 
     if (blnSavedResume) 
     { 
      objUserModel = Utility.GetGuestUserData(); ; 
      //objLocationModel.StateID = objUserModel.StateID; 
      objLocationModel.CountryID = objUserModel.CountryID; 
      objLocationModel.LogoFileName = strlogoImageName; 
      objJobsBusinessComponent.PostJob(objLocationModel, 4); 
     } 
     TempData["Message"] = "Success"; 
     //return RedirectToAction("Index"); 
     if (ModelState.IsValid) 
     { 
      return View(objLocationModel); 
     } 
     else 
     { 
      // Dropdown selected values needs to be repopulated here , if there error in the model. 
      return View(objLocationModel); 
     } 
     // return View("~/Views/Employer/PostJob.cshtml"); 
    } 

這是剃刀代碼做處理。建議我如果我做錯了,因爲我對MVC完全陌生。

@using (Html.BeginForm("PostJobAction", "PostJob", FormMethod.Post, new { enctype = "multipart/form-data", id = "PostJobForm", objPostJobModel = Model })) 
{ 

<div class="post_job" align="center" style="margin-left: 1px"> 
    <div id="tabs_container"> 
     <div class="my_profile_header"> 
      <img src="images/high_school.png" width="21" height="20" hspace="5" vspace="3" align="left" /><strong>Post 
       Job</strong> 
      <label style="float: right; color: Red; font-family: Calibri; font-style: italic; 
       margin-top: 10px"> 
       Fields marked with '*' are mandatory</label> 
     </div> 
     <div class="my_profile" id="InstituteDetail" style="display: block;"> 
      <div class="header_title_form"> 
       <img src="images/photo.png" width="24" height="24" hspace="5" vspace="2" align="left" /><div 
        align="left" style="vertical-align: middle; margin-left: 40px; margin-top: 3px; 
        font-weight: normal;"> 
        Institute Detail</div> 
      </div> 
     </div> 
     <div class="my_profile_container" align="center" style="background: none"> 
      <div class="clear"> 
      </div> 
      <div class="emolyer_box"> 
       <div align="center" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Institute Type:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left"> 
           @Html.DropDownListFor(x => x.InstituteType, (SelectList)ViewBag.InstituteType, "--Please Select Institute Type--", new { @class = "select", id = "ddlInstituteType", name = "InstituteType" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left" valign="middle"> 
           @Html.Label("Institute Category:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           <select name="InstituteCategory" id="ddlInstituteCategory" class="select" disabled="disabled"> 
           </select> 
           <img id="LoadingImage" style="width: 30px; height: 30px; vertical-align: middle; 
            visibility: hidden" src="../../Content/images/LoadingImage.gif" alt="Loading.." /> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Institute Name:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.InstituteName, new { id = "txtInstituteName", Name = "InstituteName", @class = "input" }) 
           <a style="text-decoration: none; color: Gray; cursor: default;" title="Subscription required for this feature"> 
            <u>Add More</u></a> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Zip Code:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.InstituteName, new { id = "txtZipCode", Name = "ZipCode", @class = "input" }) 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="emolyer_box"> 
       <div align="left" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Institute State:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.DropDownListFor(x => x.StateID, (SelectList)ViewBag.StateList, "---Please Select State---", new { @class = "select", ID = "ddlState", Name = "StateID" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left" valign="middle"> 
           @Html.Label("Institute City:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           <select name="CityID" id="ddlCity" class="select" runat="server"> 
           </select> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Institute Address:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextAreaFor(x => x.InstituteAddress, new { @class = "input", id = "txtInstituteAddress", style = "height:60px" }) 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="clear"> 
      </div> 
     </div> 
     <!-- End of Institute Div --> 
     <div class="my_profile" id="JobDetail" style="display: block"> 
      <div class="header_title_form"> 
       <img src="images/photo.png" width="24" height="24" hspace="5" vspace="2" align="left" /><div 
        align="left" style="vertical-align: middle; margin-left: 40px; margin-top: 3px; 
        font-weight: normal"> 
        Job Detail</div> 
      </div> 
     </div> 
     <div class="my_profile_container" align="center"> 
      <div class="clear"> 
      </div> 
      <div class="emolyer_box"> 
       <div align="center" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Job Title:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.JobTitle, new { id = "txtJobTitle", Name = "JobTitle", @class = "input" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left" valign="middle"> 
           @Html.Label("Role:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.DropDownListFor(x => x.RoleID, (SelectList)ViewBag.RoleList, "---Please Select Role---", new { @class = "select", ID = "ddlRole" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Subject:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.DropDownListFor(x => x.SubjectID, (SelectList)ViewBag.SubjectList, "---Please Select Subject---", new { @class = "select", ID = "ddlSubject" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Qualification:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.DropDownListFor(x => x.QualificationID, (SelectList)ViewBag.QualificationList, "---Please Select Qualification---", new { @class = "select", ID = "ddlQualification" }) 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="emolyer_box"> 
       <div align="left" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Job Type:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.DropDownListFor(x => x.JobType, (SelectList)ViewBag.JobTypeList, "---Please Select Job Type---", new { @class = "select", ID = "ddlJobType" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left" valign="middle"> 
           @Html.Label("Experience:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           <div class="clear"> 
           </div> 
           <div style="text-align: left"> 
            <select name="MinExperience" id="MinExperienceDropDown" style="width: 32%" class="select"> 
             <option value="">--Minimum--</option> 
             <option value="0">0</option> 
             <option value="1">1</option> 
             <option value="2">2</option> 
             <option value="3">3</option> 
             <option value="4">4</option> 
             <option value="5">5</option> 
            </select> 
            <select name="MaxExperience" id="MaxExperienceDropDown" style="width: 32%; float: right; 
             margin-right: 82px" class="select"> 
             <option value="">--Maximum--</option> 
             <option value="0">0</option> 
             <option value="1">1</option> 
             <option value="2">2</option> 
             <option value="3">3</option> 
             <option value="4">4</option> 
             <option value="5">5</option> 
            </select> 
           </div> 
           <div class="clear"> 
           </div> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Salary:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           <div class="clear"> 
           </div> 
           <div style="text-align: left"> 
            <select name="MinSalary" id="MinSalaryDropDown" style="width: 32%" class="select"> 
             <option value="">--Minimum--</option> 
             <option value="0">0</option> 
             <option value="1000">1000</option> 
             <option value="2000">2000</option> 
             <option value="3000">3000</option> 
             <option value="4000">4000</option> 
             <option value="5000">50000</option> 
            </select> 
            <select name="MaxSalary" id="MaxSalaryDropDown" style="width: 32%; float: right; 
             margin-right: 82px" class="select"> 
             <option value="">--Maximum--</option> 
             <option value="0">0</option> 
             <option value="1000">1000</option> 
             <option value="2000">2000</option> 
             <option value="3000">3000</option> 
             <option value="4000">4000</option> 
             <option value="5000">5000</option> 
            </select> 
           </div> 
           <div class="clear"> 
           </div> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("No Of Position:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.NoOfPosition, new { id = "txtNoOfPosition", Name = "NoOfPosition", @class = "input" }) 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="clear"> 
      </div> 
     </div> 
     <!-- End of Job Detail Div --> 
     <div class="my_profile" id="JobDescription" style="display: block"> 
      <div class="header_title_form"> 
       <img src="images/photo.png" width="24" height="24" hspace="5" vspace="2" align="left" /><div 
        align="left" style="vertical-align: middle; margin-left: 40px; margin-top: 3px; 
        font-weight: normal"> 
        Job Description<label style="color: Red">*</label></div> 
      </div> 
     </div> 
     <div class="my_profile_container" align="center"> 
      <div class="clear"> 
      </div> 
      <div class="emolyer_box"> 
       <div align="center" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left" id="HtmlEditor"> 
           @Html.TextAreaFor(x => x.JobDescriptionText, new { name = "inputHtmlEditor", id = "JobDescriptionText", rows = "5", }) 
           @*<textarea id="inputHtmlEditor" name="inputHtmlEditor" rows="5"></textarea>*@ 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="clear"> 
      </div> 
     </div> 
     <div class="my_profile" id="ContactInfo" style="display: block"> 
      <div class="header_title_form"> 
       <img src="images/photo.png" width="24" height="24" hspace="5" vspace="2" align="left" /><div 
        align="left" style="vertical-align: middle; margin-left: 40px; margin-top: 3px; 
        font-weight: normal"> 
        Contact Info</div> 
      </div> 
     </div> 
     <div class="my_profile_container" align="center"> 
      <div class="clear"> 
      </div> 
      <div class="emolyer_box"> 
       <div align="center" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Contact Person Name:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.ContactPersonName, new { id = "txtContPersonName", Name = "ContactPersonName", @class = "input" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left" valign="middle"> 
           @Html.Label("Phone No:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.InstitutePhoneNo, new { id = "txtInstitutePhoneNo", Name = "InstitutePhoneNo", @class = "input" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Logo On Home Page:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           <input type="checkbox" disabled="disabled" title="Subscription required for this feature" /> 
           <a style="text-decoration: none; color: Gray; cursor: default;" title="Subscription required for this feature"> 
            <u>Add/Edit Details</u></a> 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="emolyer_box"> 
       <div align="left" class="mailbox"> 
        <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("E-Mail:")<label style="color: Red">*</label> 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.ContactPersonEmailID, new { id = "txtContactPersonEmailID", Name = "ContactPersonEmailID", @class = "input" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left" valign="middle"> 
           @Html.Label("Web Site URL:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBoxFor(x => x.InstituteWebSite, new { id = "txtInstituteWebSite", Name = "InstituteWebSite", @class = "input" }) 
          </td> 
         </tr> 
         <tr> 
          <td colspan="2"> 
           &nbsp; 
          </td> 
         </tr> 
         <tr> 
          <td height="30" align="left"> 
           @Html.Label("Upload Logo Image:") 
          </td> 
          <td width="319" height="30" align="left" valign="middle"> 
           @Html.TextBox("uploadfile", "", new { @class = "input", id = "fileupload", type = "file" }) 
          </td> 
         </tr> 
        </table> 
       </div> 
      </div> 
      <div class="clear"> 
      </div> 
     </div> 
     <input type="text" value="@TempData["Message"]" /> 
    </div> 
    <!-- End of contact info --> 
    <input type="button" class="green_btn" value="Save" disabled="disabled" style="cursor: default" 
     title="Subscription required for this feature" /> 
    <input type="submit" class="blue_btn" value="Post" /> 
    <input type="button" class="blue_btn" value="Cancel" /> 
    <input type="text" value="@TempData["Message"]" /> 
    @Html.Hidden("HiddenField", TempData["Message"]) 
</div> 

} 
+0

您可以使用模型'objLocationModel'返回視圖,或者做一個ajax帖子。 –

回答

2

只是返回視圖與填充模型;

return View(objLocationModel); 
+0

謝謝克里斯, 但是,你能告訴我如何將這些值綁定到我的CSHTML文件? 它給了我錯誤。 –

+0

@DhavalMarthak向我們展示了您的模型的結構和您查看的標記,以便我們可以進一步提供幫助。您可以編輯您的問題並添加其他代碼。 –

+0

我已經添加了一些代碼片段,你可以再次看看我的問題 –

0
 [HttpPost] 
     public ActionResult PostJobAction(FormCollection PostJobForm, HttpPostedFileBase uploadfile, JobsDetailModel objLocationModel) 
     { 
      if(ModelState.IsValid) 
      { 
       return View(objLocationModel); 
      } 
      else 
      { 
       // Dropdown selected values needs to be repopulated here , if there error in the model. 
       return View(objLocationModel); 
      } 
     } 
+0

我更新了我的問題,你會清楚我想要做什麼 –

+0

你可以與我們分享剃鬚刀代碼,以及什麼控件獲取值以及什麼控制失去價值。 –

+0

再次更新代碼,添加剃刀文件內容 –

1

好了,問題是,你有你的頁面上的幾個DropDownList的是來自ViewBags但這些ViewBags沒有在PostJobAction重建。讓我重申一下Hari Gillala所說的使用ViewBag並不好,至少不是那樣。

讓我們先解決您的問題,綁定到你的模型,當你與模型這樣的回報您的視圖將保留其值的任何控件:

[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)] 
public ActionResult PostJobAction(FormCollection PostJobForm, HttpPostedFileBase uploadfile, JobsDetailModel objLocationModel) 
{ 
    return View(objLocationModel); 
} 

接下來要做的事情是有值在下拉菜單中,所以你需要重新創建ViewBags:

[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)] 
public ActionResult PostJobAction(FormCollection PostJobForm, HttpPostedFileBase uploadfile, JobsDetailModel objLocationModel) 
{ 
    // do this code after you are done doing your stuff 
    // you always need to do this since you want to have the same form whether there is an error or your operation is a success 
    ViewBag.JobTypeList = create_this_list(); 
    ViewBag.InstituteType = = create_this_list_also(); 
    return View(objLocationModel); 
} 

但有做你現在正在做什麼更好的辦法,那就是創建一個包含一些屬性,包括您的清單模型:

// The Model 
public class JobActionFormModel { 
    public JobsDetailModel InputModel {get;set;} 
    public IEnumerable<JobType> JobTypes {get;set;} 
    public IEnumerable<InstituteType> InstituteTypes {get;set;} 
} 

// The way you build it 
[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)] 
public ActionResult PostJobAction(FormCollection PostJobForm, HttpPostedFileBase uploadfile, JobsDetailModel objLocationModel) 
{ 
    var model = new JobActionFormModel { 
     InputModel = objLocationModel, 
     JobTypes = create_this_list(), 
     InstituteTypes = create_this_list_also(), 
    } 
    return View(objLocationModel); 
} 

// The way you consume it on your view 
<td width="319" height="30" align="left"> 
    @Html.DropDownListFor(x => x.InstituteType, new SelectList(Model.InstituteTypes, "Id", "Value", Model.InstituteType, new { @class="select" }) 
</td> 
// same goes for all your lists