提交表单后MVC 3 C#::保留表单值

时间:2013-03-28 13:11:09

标签: c# asp.net-mvc-3

我正面临着一个发展中的问题。

我只想在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">
                                &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>

}

3 个答案:

答案 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);
           }
        }