0

Kinda lost in the sauce here...pretty green coming into the ASP.net realm, but have been enjoying my time in it so far.

So let me start from the beginning with this:

Background: I am working on a ASP.net MVC5 application with user login informtion. The user will create an account, recieve messages, etc. The critical component is that there will be a form on the site that allows the user to submit information in a Conditional Logic HTML Form complete with radio buttons, text areas and more. My end goal is to allow the user to fill out and submit the form, therefore submitting it to the MySQL database, sending an email to admin and the user with their selected elements and then populating their responses within their "Account Dashboard" area.

Problem: I am trying to get the user submitted information based on their radio button selection in the HTML Form, which would come in 3 different scenarios:

  • Web Project
  • 2D Design Project
  • 3D Design Project

So if the user chooses "Web" instead of "Graphic" in the "Project Type" form field, they would be submitting only values related to "Web". The problem I am running into is not being sure on the best way to accomplish this...

Here's the code I've started creating for when the user chooses a Web project for submission to the database:

if (IsPost) && (RadioButton.projectType.Equals(Web))
{
    projectType = Request.Form["Web"];
    TypeOfWebsite = Request.Form["TypeOfWebsite"];
    DeviceExperience = Request.Form["DeviceExperience"];
}

Here is the form values:

<form method="post">
        <br />


        <div class="row">


            <label class="formquestion col-md-3">Project Name:</label>
            <input class="col-md-9" type="text" placeholder="Enter project name..." />


        </div>

        <div class="row">
            <label id="ProjectType" for="ProjectType" class="formquestion col-md-3">Project Type: </label>
            <span class="col-md-8">

                <input id="Web" name="ProjectType" type="radio" value="@Request.Form["Web"] value=" web" />
                <label for="Web">Web</label>

                <input id="Graphic" name="ProjectType" type="radio" value="Graphic" />
                <label for="Graphic">Graphic</label>

            </span>

        </div>



        <div class="hidefield" id="WebProject">
            <div class="row">

                <label class="formquestion col-md-3">Type Of Website: </label>


                <span class="col-md-8">

                    <input id="WebApplication" name="TypeOfWebsite" type="radio" value="1" />
                    <label class="Web Application" for="Web Application">Web Application*</label>


                    <input id="eCommerce" name="TypeOfWebsite" type="radio" />
                    <label class="choice" for="eCommerce">eCommerce</label>


                    <input id="SocialNetwork" name="TypeOfWebsite" type="radio" />
                    <label class="choice" for="SocialNetwork">Social Network</label>


                    <input id="Forum" name="TypeOfWebsite" type="radio" />
                    <label class="choice" for="Forum">Forum</label>


                    <input id="PackageDesign" name="TypeOfWebsite" type="radio" />
                    <label class="choice" for="PackageDesign">News/Article</label>


                    <input id="Interactive" name="TypeOfWebsite" type="radio" />
                    <label class="choice" for="Interactive">Interactive</label>


                    <input id="InformationalPersonal" name="TypeOfWebsite" type="radio" />
                    <label class="choice" for="InformationalPersonal">Informational/Personal</label>


                    <p>*Not exactly sure what a web application is? Well...think TurboTax, Zamzar, Mint, Online Banking Services, MailChimp and Google Docs. </p>


                </span>



            </div>


            <div class="row">


                <label class="formquestion col-md-3" for="DeviceExperience">Device Experience: </label>


                <span class="col-md-8">


                    <input id="Desktop" name="DeviceExperience" type="radio" value="1" />
                    <label for="Desktop">Desktop</label>


                    <input id="Tablet" name="DeviceExperience" type="radio" />
                    <label for="Tablet">Tablet</label>


                    <input id="Mobile" name="DeviceExperience" type="radio" />
                    <label for="Mobile">Mobile</label>


                    <input id="Responsive" name="DeviceExperience" type="radio" />
                    <label for="Responsive">Responsive</label>


                </span>


            </div>
        </div>


        <div class="hidefield" id="GraphicDimensions">
            <div class="row">


                <label class="formquestion col-md-3">Design Dimensions: </label>


                <span class="col-md-8">


                    <input id="2D" name="Dimension" type="radio" value="2D" />
                    <label class="choice" for="Web">2D</label>


                    <input id="3D" name="Dimension" type="radio" value="3D" />
                    <label for="3D">3D</label>


                </span>


            </div>
        </div>


        <div class="hidefield" id="2DGraphicProject">
            <div class="row">

                <label class="formquestion col-md-3">Choose 2D Design: </label>


                <span class="col-md-8">


                    <input id="BusinessCard" name="2DDesign" type="radio" value="1" />
                    <label class="BusinessCard" for="BusinessCard">Business Card</label>


                    <input id="Flyer" name="2DDesign" type="radio" />
                    <label class="choice" for="Flyer">Flyer</label>


                    <input id="Poster" name="2DDesign" type="radio" />
                    <label class="choice" for="Poster">Poster</label>



                    <input id="PrintAd" name="2DDesign" type="radio" />
                    <label class="choice" for="PrintAd">Print Ad</label>


                    <input id="PackageDesign" name="2DDesign" type="radio" />
                    <label class="choice" for="PackageDesign">Package Design (Food/Product/Media)</label>


                    <input id="Logo" name="Logo" type="radio" />
                    <label class="choice" for="Logo">Logo</label>


                </span>


            </div>
        </div>

        <div class="hidefield" id="hide3DDesignExplaination">

            <div class="row">
                <label class="formquestion col-md-3" for="3DDesign">Explain this 3D Design project: </label>
                <textarea id="3DDesignExplaination" name="3DDesignExplaination" class="textareaform"></textarea>


            </div>
        </div>

        <div class="hidefield" id="ProjectObjective">

            <div class="row">
                <label class="formquestion col-md-3" for="Objective">Project Objective:</label>
                <textarea id="ObjectiveExplaination" name="ObjectiveExplaination" class="textareaform" placeholder="What is this website's primary objective? Sell me on it!"></textarea>
            </div>
        </div>

        <div class="hidefield" id="DesignCopy">
            <div class="row">
                <label class="formquestion col-md-3" for="DesignCopy">Design Copy </label>
                <textarea id="DesignCopy" name="DesignCopy" class="textareaform" placeholder="Any messeging/text/info needed to be included?"></textarea>
            </div>
        </div>



        <div class="hidefield" id="TargetAudience">
            <div class="row">
                <label class="formquestion col-md-3" for="TargetAudience">Describe Your Target Audience:</label>
                <textarea id="TargetAudienceExplaination" name="TargetAudienceExplaination" class="textareaform" placeholder="Who is your target audience? What are their ages? What do they do for a living? Elaborate!"></textarea>
            </div>
        </div>

        <div class="hidefield" id="Keywords">
            <div class="row">
                <label class="formquestion col-md-3">Keywords To Describe This Project:</label>
                <input class="col-md-9" type="text" placeholder="Give me 3 keywords!">
            </div>
        </div>


        <div class="hidefield" id="FirstInteraction">
            <div class="row">
                <label class="formquestion col-md-3" for="UserFirstInteraction">User First Interaction:</label>
                <textarea id="UserFirstInteraction" name="UserFirstInteraction" class="textareaform" placeholder="What Should The User Do First Upon Visiting The Website?"></textarea>
            </div>
        </div>

        <div class="hidefield" id="General2">
            <div class="row">
                <label class="formquestion col-md-3" for="FavoriteColors">3 Favorite Colors?</label>
                <input type="text" class="a-popup" data-color-format="hex" value="GreenYellow">
                <input type="text" class="a-popup" data-color-format="hex" value="GreenYellow">
                <input type="text" class="a-popup" data-color-format="hex" value="GreenYellow">
                <small>Hint: you can type in any CSS color (even named ones, like yellow).</small>
                </p>
            </div>


            <div class="hidefield" id="Necessities">
                <div class="row">
                    <label class="formquestion col-md-3" for="UserFirstInteraction">Necessities:</label>
                    <textarea id="DesignCopy" name="ProjectReason" class="textareaform" placeholder="What are necessities for this project? Specific graphic/sitefunctionalities?"></textarea>
                </div>
            </div>

            <h5 class="bkgblack center-align col-md-11">Provide URL's of Site/Graphics (whatever is applicable) that design you admire</h5>

            <div class="row">
                <label class="formquestion col-md-3" for="AdmireURL1">URL #1: </label>
                <input id="AdmireURL1" name="AdmireURL1" type="text" maxlength="255" title="" value="http://" />
            </div>

            <div class="row">
                <label class="formquestion col-md-3" for="AdmireURL2">URL #2: </label>
                <input id="AdmireURL2" name="AdmireURL2" type="text" maxlength="255" title="" value="http://" />

            </div>
            <div class="row">
                <label class="formquestion col-md-3" for="AdmireURL3">URL #3: </label>
                <input id="AdmireURL3" name="AdmireURL3" type="text" maxlength="255" title="" value="http://" />
            </div>


            <div class="hidefield" id="RivalURL">
                <h5 class="bkgblack center-align col-md-11">Provide URL's for "competitor" sites:</h5>

                <div class="row">
                    <label class="formquestion col-md-3" for="RivalURL1">Rival URL #1: </label>
                    <input id="RivalURL1" name="RivalURL1" type="text" maxlength="255" title="" value="http://" />
                </div>

                <div class="row">
                    <label class="formquestion col-md-3" for="RivalURL2">Rival URL #2: </label>
                    <input id="RivalURL2" name="RivalURL2" type="text" maxlength="255" title="" value="http://" />

                </div>
                <div class="row">
                    <label class="formquestion col-md-3" for="RivalURL3">Rival URL #3: </label>
                    <input id="RivalURL3" name="RivalURL3" type="text" maxlength="255" title="" value="http://" />
                </div>
            </div>
        </div>

        <br />

        <div class="hidefield" id="ProjectReason">
            <div class="row">
                <label class="formquestion col-md-3" for="UserFirstInteraction">Project Reason:</label>
                <textarea id="DesignCopy" name="ProjectReason" class="textareaform" placeholder="Why does your target audience NEED this project to exist?"></textarea>
            </div>
        </div>



        <div class="row">
            <form action="file-upload.php" class="dropzone"></form>

        </div>


        <button type="submit" name="SubmitForm" class="btn btn-info btn-large">Submit Form</button>

    </form>

The various MSDN tutorials I have been looking at to better understand:

These tutorials haven't made it clear to me on how to create these essential 3 conditional statements for my form:

  • "If user has chosen Project Type = "Web" and submitted the form, send (insert form variables) to the database"
  • "If user has chosen Project Type = "Graphic" then Dimension = "2D" and submitted the form, send (insert relative values) to the database"
  • "If user has chosen Project Type = "Graphic", then Dimension = "3D" and submitted the form, send (insert relative values)" to the database"

Recap:

  • How do I write the conditional statement to accomplish this?
  • Should I reconsider the HTML form format I am using in favor of ASP Web Pages?

I have written some JavaScript to show the available form values based upon user selection to follow this schema using the "value" of each field. It works just as intended! Now I'm just trying to connect dots on how to submit this information to the database so I can use it in the user profile. Any thoughts/answers would be greatly welcomed!

1 Answer 1

1

That's a complex form. But, for the sake of simplicity I will reduce the number of fields in your form to give you an idea of how things are the MVC way.

I'll start by pointing out that you are not taking the full advantage of MVC. It stands for Model-View-Controller, which is a design pattern. You probably know that stuff, but, I don't see a hint in your code that tells me you are using models in your project, you don't have to...but since you are starting with MVC you should. So, suppose you have the following models...

public class ProjectTypeModel
{
    public string Name { get; set; }
}

public class TestModel
{
    public IList<ProjectTypeModel> Types { get; set; }
}

Then you're view declares that same model...

@model  MvcTest.Models.TestModel

This goes on the top of the view file, the first line of code. The simplified form would look like this...

@using(Html.BeginForm("ProcessTypes","Home")){
    <div class="row">
        <label class="formquestion col-md-3">Project Type: </label>
        <span class="col-md-8">

            @foreach (var p in Model.Types)
            {
                <input id="@("radio_" + p.Name)" type="radio" name="SelectedProjectType" value="@p.Name" />
                <label for="@("radio_" + p.Name)">@p.Name</label>
            }

        </span>

    </div>

    <input type="submit" name="SubmitForm" class="btn btn-info btn-large" value="Submit Form" />
    }

The only thing to note here is that the radio buttons MUST have the same name. The id is not too relevant, just make them unique so you can set the label's for attribute, this way when you click the label the radio button will change its state. The last thing to notice is the form is posting to the "ProcessTypes" action of the Home controller...

and your Home controller's action will look something similar to this...

public ActionResult ProcessTypes(string SelectedProjectType)
        {

            //processing here...
       }

Obviously, the SelectedProjectType will have come with the value of the radio button you selected..."Web" or "Design".

Even though this is a very simplified example you can get an idea of how things work in MVC (and Razor). There's a bit more to cover but I'm sure you will find out by yourself. Hope it makes sense

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.