2013-03-28 2 views
1

HI Я столкнулся с одной проблемой в разработке.MVC 3 C# :: Сохранять значения формы после формы отправки

Я просто хочу, чтобы сохранить свои данные формы после подачи моей формы с помощью метода HttpPost в MVC3

Я не хочу, чтобы перенаправлять в любом месте после поста, в ту же форме, я хочу, чтобы мои представленных значения обратно во всех областях

Любые санкции?

Я делаю обработку в следующий метод

[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"); 
    } 

Это RAZOR код. Предложите мне, если я делаю неправильно, потому что я абсолютно не знаком с 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

Thanks Chris, Но можете ли вы рассказать мне, как связать эти значения с моим CSHTML-файлом? Это дает мне ошибки. –

+0

@DhavalMartak покажет нам структуру вашей модели и разметку на вас, чтобы мы могли помочь дальше. Вы можете отредактировать свой вопрос и добавить дополнительные коды. –

+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

Обновлен код, добавлено содержимое файла Razor –

1

Хорошо так что вопрос в том, что у вас есть несколько DropDownList на странице, которые приходят из ViewBags, но эти ViewBags не восстанавливаются в PostJobAction. Позвольте мне просто повторить то, что Хари Джиллала предположил, что не стоит использовать ViewBag, по крайней мере, не так.

Давайте решать проблему первых, любые элементы управления, которые связаны с вашей модели сохранят свои значения, когда вы вернуть View с моделью, как это:

[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 
Смежные вопросы