我正面临着一个发展中的问题。
我只想在MVC3中使用httppost方法提交表单后保留表单数据
我不希望在发布后的任何地方重定向,在同一表单上我希望我提交的值返回所有字段
任何sugestions?
我正在按照以下方法进行处理
[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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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">
</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 :(得分:2)
只需使用填充的模型返回视图;
return View(objLocationModel);
答案 1 :(得分:1)
好的,问题是您的页面上有一些来自ViewBags的DropDownList,但这些ViewBag不会在PostJobAction
中重新创建。让我重申Hari Gillala提到的使用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
答案 2 :(得分: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);
}
}