How to convert a static html into razor view in asp.net mvc? - asp.net-mvc

I have the following simple bootstrap form:
#{
ViewBag.Title = "Register";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h3>Register</h3>
<br>
<form action="/User/Register">
<div class="form-group row">
<label class="col-sm-2 col-md-1 col-form-label">Name</label>
<div class="col-sm-10 col-md-2">
<input name="name" type="text" class="form-control" placeholder="Enter Name">
</div>
</div>
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-md-1 col-form-label">Email</label>
<div class="col-sm-10 col-md-2">
<input name="email" type="email" class="form-control" placeholder="Enter email">
</div>
</div>
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-md-1 col-form-label">MAC</label>
<div class="col-sm-10 col-md-2 positioned_relative">
<span class="add-new-icon glyphicon glyphicon-plus-sign" id="add_mac"> </span>
<input type="text" class="form-control" id="mac_addr" placeholder="Enter MAC">
</div>
</div>
<div class="form-group row new_mac_wrapper">
<div class="col-md-offset-3">
<div class="new_mac_container">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary col-sm-offset-1">Register</button>
</form>
I want to convert this into razor view as follows:
#model RouterManagement.Models.UserViewModel
#{
ViewBag.Title = "Register";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h3 class="pull-left">Register</h3> <br />
#using (Html.BeginForm())
{
#Html.AntiForgeryToken()
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
<div class="form-group row">
#Html.LabelFor(model => model.Name, htmlAttributes: new { #class = "col-sm-2 col-md-1 col-form-label" })
<div class="col-sm-10 col-md-2">
#Html.EditorFor(model => model.Name, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Name, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Email, htmlAttributes: new { #class = "col-sm-2 col-md-1 col-form-label" })
<div class="col-sm-10 col-md-2">
#Html.EditorFor(model => model.Email, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Email, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Password, htmlAttributes: new { #class = "col-sm-2 col-md-1 col-form-label" })
<div class="col-sm-10 col-md-2">
#Html.EditorFor(model => model.Password, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Password, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.Mac, htmlAttributes: new { #class = "col-sm-2 col-md-1 col-form-label" })
<div class="col-sm-10 col-md-2">
#Html.EditorFor(model => model.Mac, new { htmlAttributes = new { #class = "form-control" } })
#Html.ValidationMessageFor(model => model.Mac, "", new { #class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-sm-10 col-md-2">
<input type="submit" value="Create" class="btn btn-primary col-sm-offset-1" />
</div>
</div>
}
<div>
#Html.ActionLink("Back to List", "Index")
</div>
And for this conversion I get the following rendered HTML:
<form action="/Users/Register" method="post"><input name="__RequestVerificationToken" type="hidden" value="IZ_dvCy7QtB1VsoqQGh6x_Yzr1DME9V6LjKs1Fi8KL6KxOoKNNvFlH6mdw8yD4xIj-LKaUXFsNZndDTeHOa8xCVZPdu7b8qNXeL05IdIyiQ1"> <div class="form-group row">
<label class="col-sm-2 col-md-1 col-form-label" for="Name">Name</label>
<div class="col-sm-10 col-md-2">
<input class="form-control text-box single-line" id="Name" name="Name" type="text" value="">
<span class="field-validation-valid text-danger" data-valmsg-for="Name" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 col-md-1 col-form-label" for="Email">Email</label>
<div class="col-sm-10 col-md-2">
<input class="form-control text-box single-line" id="Email" name="Email" type="text" value="">
<span class="field-validation-valid text-danger" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 col-md-1 col-form-label" for="Password">Password</label>
<div class="col-sm-10 col-md-2">
<input class="form-control text-box single-line" id="Password" name="Password" type="text" value="">
<span class="field-validation-valid text-danger" data-valmsg-for="Password" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 col-md-1 col-form-label" for="Mac">Mac</label>
<div class="col-sm-10 col-md-2">
<span class="field-validation-valid text-danger" data-valmsg-for="Mac" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-sm-10 col-md-2">
<input type="submit" value="Create" class="btn btn-primary col-sm-offset-1">
</div>
</div>
</form>
This is approximately close to my static html. If you pay a deep attention you can see some additional html generated in case of razor view. I am okay with this additional html but why my design has been broken. I checked for css and js files. All are okay, but there is something related to razor conversion only. Any Idea?
N.S: I am switching from PHP to ASP. So I am apologizing if my question is not standard to ask here. Thanks for your time.

In brief - this two HTML's are not the same.
They differ in a few things:
- in original bootstrap form, you have inputs for Name, Email, and Mac - in generated you have Name, Email, Password, and Mac.
Then in original, each input tag is wrapped in div with class = "form-group row" in generated only first input has these, and the rest have only "form-group". Then in original inside MAC input group, you have div with class="col-sm-10 col-md-2 positioned_relative" and in original, there is no such thing.
Also in original, you have div with class="form-group row new_mac_wrapper" and in the generated code there is none.
I will not go further into details but as you can see you have two different code - hard to tell what is breaking things without a chance to see the whole project.
However, the suggestion is to start little by little - start with just one field (Name) in original and on generated code.
See the differences and only when there is none keep up adding and comparing one field at the time.

Related

Radio-Buttons overlapping each other

I am building a form using bootstrap 4.3 with few Radio-Buttons, but the issue is, it overlaps each other as shown below.
I tried it in jsfiddle and the result is same. Here is my working in jsfiddle: https://jsfiddle.net/hifni/ky3xzej0/7/
My Razor page looks like this:
<div class="alert alert-info">
<p>The request will enable your Credit Balance to be in your account for future trading/settlement.</p>
<footer class="blockquote-footer">Subject to T&C</footer>
</div>
<style>
.form-control {
height: auto;
}
</style>
#using (Html.BeginForm())
{
#Html.AntiForgeryToken()
<div class="form">
<hr />
#Html.ValidationSummary(true, "", new { #class = "text-danger" })
<div class="form-group">
#Html.HiddenFor(model => model.AccountId)
<input type="hidden" id="tempStore" />
#Html.HiddenFor(model => model.SendSMS)
#Html.HiddenFor(model => model.RequiresApproval)
</div>
<div class="form-group">
<label>Pick a Settlement Mode</label>
<div class="form-control">
<div class="form-check">
#Html.RadioButtonFor(model => model.IsSettlementOnHold, "No", new { #class = "form-check-input", #id = "rbIsSettlementOnHold_No" })
#Html.Label("rbIsSettlementOnHold_No", "Standard ", new { #class = "form-check-label" })
#Html.RadioButtonFor(model => model.IsSettlementOnHold, "Yes", new { #class = "form-check-input", #id = "rbIsSettlementOnHold_Yes" })
#Html.Label("rbIsSettlementOnHold_Yes", "On Request ", new { #class = "form-check-label" })
#Html.ValidationMessageFor(model => model.IsSettlementOnHold, "", new { #class = "text-danger" })
</div>
</div>
</div>
<div class="form-group">
#Html.TextAreaFor(model => model.AdditionalNote, 3, 50, new { #class = "form-control", #placeholder = "Any Aditional Note" })
#Html.ValidationMessageFor(model => model.AdditionalNote, "", new { #class = "text-danger" })
</div>
<div class="form-group">
#*<input type="submit" value="Submit" class="btn btn-default" id="btnSelfServiceRequestSubmit"/>*#
<button type="submit"
class="btn btn-dark"
id="btnSelfServiceRequestSubmit"
#*data-toggle="modal"
data-target="#modalEntityDetail"
data-url="#Url.Action("_CodePrompt", "ExternalSelfServiceRequest")"*#>
Submit
</button>
<button type="reset"
class="btn btn-warning">
Reset
</button>
</div>
#if (Model.RequiresApproval.Equals("Yes"))
{
<div class="alert alert-info" role="alert">
For security verification purpose you will be required to access your JKSB Registered Mobile, there will
be a verification code sent to it.
</div>
}
</div>
}
Appreciate any help.
You can separate your "form-check" div like this;
<div class="form-control">
<div class="form-check form-check-inline">
<input checked="checked" class="form-check-input" id="rbIsSettlementOnHold_No" name="IsSettlementOnHold" type="radio" value="No">
<label for="rbIsSettlementOnHold_No" class="form-check-label"> Standard</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" id="rbIsSettlementOnHold_Yes" name="IsSettlementOnHold" type="radio" value="Yes">
<label for="rbIsSettlementOnHold_Yes" class="form-check-label"> On Request </label>
</div>
</div>
And using "form-check-inline" class will be provide you a horizontal alignment.
I hope this helps.

pass data from input text [post method] MVC

I want to insert data into my DB in ASP MVC. I have successfully inserted into my DB. here is the code for the view:
<div class="form-group">
#Html.LabelFor(model => model.username, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
#Html.EditorFor(model => model.username)
</div>
</div>
<div class="form-group">
#Html.LabelFor(model => model.admin_privilage, htmlAttributes: new { #class = "control-label col-md-2" })
<div class="col-md-10">
<div class="checkbox">
#Html.EditorFor(model => model.admin_privilage)
</div>
</div>
</div>
and the controller :
[HttpPost]
public ActionResult createuser (User collection)
{
List<object> lst = new List<object>();
lst.Add(collection.username);
lst.Add(collection.admin_privilage);
object[] allitems = lst.ToArray();
int output = db.Database.ExecuteSqlCommand("insert into USER (username,admin_privilage) values (#p0,#p1)", allitems);
return View();
}
What I want to ask is, in my view is using customize input text and label as follow:
<div class="form-group">
<label for="username" class="col-form-label">名前:</label>
<input type="text" class="form-control" id="username">
</div>
<div class="form-group">
<div class="row">
<div class="col-md-6">
<input type="checkbox" id="addadmin" name="admin">
<label for="admin" class="col-form-label">Admin</label>
</div>
</div>
</div>
How can I capture the input parameter from users and pass it in Controller? so it can be inserted to my database as well.
You can try it using the same model.name as in html form control id and name attribute like:
<div class="form-group">
<label for="username" class="col-form-label">名前:</label>
<input type="text" class="form-control" **id="username" name="username"**>
</div>
<div class="form-group">
<div class="row">
<div class="col-md-6">
<input type="checkbox" **id="admin_privilage" name="admin_privilage"**>
<label for="admin_privilage" class="col-form-label">Admin</label>
</div>
</div>
</div>

How to prevent asp mvc generating extra code on EditorForModel for every property?

I have created an EditorTemplate for multiline text data types.
But after render page, ASP adds extra html code. How do I prevent this?
My EditorTemplate for multiline text is:
#model string
<div class="control-group">
#Html.LabelFor(x => x, new {#class="control-label col-md-2"})
<div class="col-md-10">
#Html.TextAreaFor(x => x , new { #class="form-control"})
#Html.ValidationMessageFor(x => x, "", new { #class = "text-danger" })
</div>
</div>
generated code is:
<div class="editor-label">
<label for="Description">ِDescription</label>
</div>
<div class="editor-field">
/*Start My template*/
<div class="control-group">
<label class="control-label col-md-2" for="Description">Description</label>
<div class="col-md-10">
<textarea class="form-control" cols="20" id="Description" name="Description" rows="2"></textarea>
<span class="field-validation-valid text-danger" data-valmsg-for="Description" data-valmsg-replace="true"></span>
</div>
/*End of template*/
</div>
<span class="field-validation-valid" data-valmsg-for="Description" data-valmsg-replace="true"></span></div>

I have MVC Error Parser Error

first time use MVC and i want to change the position and want to change the logo. after this i write the #using
the error is Parser Error what happened ?
#using Angga.Models
#model LoginViewModel
#{ ViewBag.Title = "Log in"; }
<div class="col-sm-4">
</div>
<div class="col-sm-4">
#using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { #class = "form-horizontal", role = "form"})) { #Html.AntiForgeryToken()
<div class="page animsition vertical-align text-center" data-animsition-in="fade-in" data-animsition-out="fade-out" style="animation-duration: 800ms; opacity: 1;">
<div class="page-content vertical-align-middle">
<div class="panel">
<div class="panel-body">
<div class="brand">
<img class="brand-img" src="~/image/logo-blue.png" alt="..." />
<h2 class="brand-text font-size-18">MYLOYALTY</h2>
</div>
<form method="post" action="customer_search.php" autocomplete="off">
#Html.ValidationSummary(true, "", new {#class = "text-danger"})
<div class="form-group form-material floating">
<!-- Untuk Email-->
<!-- <label class="floating-label">Email</label> -->
<div class="form-group">
#Html.LabelFor(m => m.Email) #Html.TextBoxFor(m => m.Email, new { #class = "form-control" }) #Html.ValidationMessageFor(m => m.Email, "", new { #class = "text-danger" })
</div>
#*
<input style="margin-left: auto; margin-right: auto; text-align: center;" type="email" class="form-control" name="email" />*#
</div>
<!-- Untuk Password-->
<div class="form-group form-material floating">
#Html.LabelFor(m => m.Password) #Html.PasswordFor(m => m.Password, new {#class= "form-control"}) #Html.ValidationMessageFor(m => m.Password, "", new { #class = "text-danger"}) #*
<input style="margin-left: auto; margin-right: auto; text-align: center;" type="password" class="form-control" name="password" />*#
</div>
<div class="form-group clearfix">
<div class="checkbox-custom checkbox-inline checkbox-primary checkbox-lg pull-left">
<input type="checkbox" id="inputCheckbox" name="remember" />
<label for="inputCheckbox">Remember me</label>
</div>
</div>
<button style="" class="btn btn-primary btn-block btn-lg" onclick="location.href='#Url.Action(" About ")'">Sign in</button>
</form>
</div>
</div>
}
<footer class="page-copyright page-copyright-inverse">
<p>© 2016. All RIGHT RESERVED.</p>
</footer>
</div>
</div>
</div>
<div class="col-sm-4">
</div>
#section Scripts { #Scripts.Render("~/bundles/jqueryval") }
and this my code :D, the error is Parser Error
The Error is
enter image description here
this arise for your nested form
because you already introduce a form in html div
#using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { #class = "form-horizontal", role = "form"})) { #Html.AntiForgeryToken()
........
and you try to introduce another form in the same form
<form method="post" action="customer_search.php" autocomplete="off">
......

Formatting on form not enough room for labels

I am new to mvc I am having some styling issues here with my form for some reason. I dont appear to have enough room for my text labels and its being squashed full screen.
I do not no if begin form would mess with the styling or not but having a real issue here.
<div class="col-xs-12 col-sm-12">
#using (Html.BeginForm("Step1", "Forms", FormMethod.Post, new { #class = "form-horizontal" }))
<h4>Health Check - Personal Details</h4>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("First Name", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="firstName" name="firstName" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Middle Name", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmiddleName" name="txtMiddleName" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Surname", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtLastName" name="txtLastName" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Saluation", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtSaluation" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Aliases", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtAliases" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Maritial Status", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmStatus" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Address 1", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtAddress1" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Address 2", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtAddress2" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("City", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmStatus" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Post Code", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmStatus" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("County", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtCounty" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Country", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmStatus" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Date Of Birth", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
#(Html.Kendo().DatePicker()
.Name("datepicker"))
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Home Tel No", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmStatus" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Home Work No", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtmStatus" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Fax No", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtFaxNo" name="txtFaxNo" class="form-control" type="text" />
</div>
</div>
<div class="form-group">
<div class="col-xs-3 text-right">
#Html.Label("Mobile No", new { #class = "col-md-2 control-label" })
</div>
<div class="col-xs-9">
<input id="txtMobile" name="txtMobile" class="form-control" type="text" />
</div>
</div>
<button type="submit" id="btnSave">Save</button>
Answer 1 works ok for full screen but when mobile it shows as this
#Html.Label("Surname", new { #class = "col-md-2 control-label" })
renders
<label class="col-md-2 control-label">Surname</label>
So, you are nesting a .col-md-2 inside a .col-xs-3.
If you see form-horizontal docs
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
So you can try something like this for each .form-group
<div class="form-group">
#Html.Label("Surname", new { #class = "col-md-3 control-label" })
<div class="col-md-9">
<input id="txtLastName" name="txtLastName" class="form-control" type="text" />
</div>
</div>

Resources