1

やあ私は開発で 1 つの問題に直面しています。

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>

}
4

3 に答える 3

2

移入されたモデルでビューを返すだけです。

return View(objLocationModel);
于 2013-03-28T13:12:58.720 に答える
1

さて、問題は、ページに ViewBags からの DropDownList がいくつかありますが、これらの 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
于 2013-03-28T14:17:42.600 に答える
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);
           }
        }
于 2013-03-28T13:19:45.817 に答える