hide/show control in mvc4 cshtml - asp.net-mvc

I have two Dropdownlist as follows
#Html.DropDownList("ddl_SearchBy", new List<SelectListItem>
{
new SelectListItem{Text="PA Number",Value="PA"},
new SelectListItem{Text="Customer Code" ,Value="CustCode"},
new SelectListItem{Text="Customer Name" ,Value="CustName"},
new SelectListItem{Text="Order Type" ,Value="OrderType"},
new SelectListItem{Text="Discount Type" ,Value="DiscType"},
new SelectListItem{Text="EIC", Value="EIC"},
new SelectListItem{Text="Status", Value="status"}
}, "-Select Criteria-", new { #class = "form-control", #id = "ddl_SearchBy" }
#Html.DropDownList("ddl_OrderType", Model.lstOrderType, "-Select Order Type-", new { #class = "form-control", #id = "ddlOrderType"})
#Html.DropDownList("ddl_Status", Model.lstStatus, "-Select Status-", new { #class = "form-control", #style = "display:none", #id = "ddl_Status" })
In Jquery I have done something like this
$('#ddl_SearchBy').change(function () {
if ($('#ddl_SearchBy').val() == 'status') {
$("#ddlDiscountType").hide();
$("#ddlStatus").show();
}
});
but when i changed event ddlstatus not shown

You can change visibility option by putting them in the DIV and make DIV hide and show depends on your requirement.
Please try this.

You can do following two changes,
1). In CSHTML File
#Html.DropDownList("ddl_Status", Model.lstStatus, "-Select Status-", new { #class = "form-control", #style = "display:none", #id = "ddl_Status" })
change id to "ddlStatus", like follows,
#Html.DropDownList("ddl_Status", Model.lstStatus, "-Select Status-", new { #class = "form-control", #style = "display:none", #id = "ddlStatus" })
2). in JS File
$('#ddl_SearchBy').change(function () {
if ($('#ddl_SearchBy').val() == 'status') {
$("#ddlDiscountType").hide();
$("#ddl_Status").show();
}
});

If you wrap your function with $(document).ready(function(){ });

Related

get value from editorfor inside for loop

I'm kinda new to ASP.NET so i'm having some trouble to find out how I can do this. I have this problem where the user will give an amount(let's say 5) and then I have to create 5 textbox for the user to type some number in. My logic is, the user type the number amount and I create a html.editorfor foreach number.the problem is that I need the value from each editor.
like this.
<div>
#for (int i = 0; i < Model.qtde; i++)
{
#Html.EditorFor(c => c.numeros, new
{
htmlAttributes =
new
{
#class = "form-control input-lg",
autofocus = true,
#type = "number",
min = 0,
max = 1000
}
})
#Html.ValidationMessageFor(model => model.numeros, "",
new { #class = "text-danger" })
}
</div>
qtde: number amount that the user typed.
numeros: the number that the user typed.
If more information is need I'll update accordingly.
Use following code which will give you correct values (numeros[i] will give you value of each editor) and declare numeros as List or array:
#for (int i = 0; i < Model.qtde; i++)
{
#Html.EditorFor(c => c.numeros[i], new
{
htmlAttributes =
new
{
#class = "form-control input-lg",
autofocus = true,
#type = "number",
min = 0,
max = 1000
}
})
#Html.ValidationMessageFor(model => model.numeros[i], "",
new { #class = "text-danger" })
}

disable Html.DropDownListFor

I have the below code in CSHTML but seems like the dropdown is not getting disabled
#Html.DropDownListFor(x => x.Task_Status_Code, Model.TaskStatus, new { #class = "form-control", #disabled = "disabled" })
I want to disable it but it is not working.
#Html.DropDownListFor(
x => x.Task_Status_Code,
Model.TaskStatus,
new { #class = "form-control", disabled = "disabled" })
Removed the # sign before the disabled property name.
You need to add the # character before any dotnet keywords like class. Custom properties do not need to have # prefix.
Please check with below snippet !
#Html.DropDownListFor(
x => x.ReminderTime,
Model.RemindersList,
new { disabled = "disabled" }
)
#Html.DropDownListFor(x => x.Task_Status_Code, Model.TaskStatus, new { disabled = "disabled" })
That will work as well unless you define css form control with in then
#Html.DropDownListFor(x => x.Task_Status_Code, Model.TaskStatus, new { #class="form-control", disabled = "disabled" })
Remember not to put #sign before disabled

Adding a default value to selected list Razor

I am populating a dropdown like this
primaryDrop = new Dictionary<string, string>()
{
{"1", "Getting ready"},
{"2", "Starting"},
{"3", "All"},
{"4", "Other"}
};
PrimaryDrop = primaryDrop.Select(item => new SelectListItem
{
Value = item.Key,
Text = item.Value
});
And displaying it like this
#Html.DropDownListFor(m => m.SelectedPrimary, new SelectList(Model.PrimaryDrop, "Value", "Text"), "Select ...", new { #class = "form-control" })
How can I select a default value to 'Other' for example
Was thinking something like this
#Html.DropDownListFor(m => m.SelectedPrimary, new SelectList(Model.PrimaryDrop, "Value", "Text", new { SelectedItem = "Other" }), "Select ...", new { #class = "form-control" })
but doesn't work
You don't need to create an object to specify the selected item, you just need to give the value you want. In your case, Other has a value of 4:
#Html.DropDownListFor(m => m.SelectedPrimary,
new SelectList(ViewBag.PrimaryDrop, "Value", "Text", "4"),
"Select ...",
new { #class = "form-control" })
You can achieve it by server code, when you populate data
PrimaryDrop = primaryDrop.Select(item => new SelectListItem
{
Value = item.Key,
Text = item.Value,
Selected = item.Key == "4" // Or item.Value== "Others"
});
Or we can set value for SelectedPrimary of model
SelectedPrimary = "4"

Default Empty Option for MVC dropdown menu

I have the following DropDownListFor that displays a list of states for the user to choose from. How can I default the dropdown to be empty. It currently defaults to the first state in alphabetical order ("Alaska")
#Html.DropDownListFor(m => m.User.StateID,
new SelectList(Model.User.States.Where(filter => filter.Active && (filter.CountryID == 1))
.Select(item => new
{
ID = item.StateProvinceID,
Description = item.Name
}),
"ID",
"Description",
Model.User.StateID),
new { #data_bind = "value: user.StateID, enable:!isSiteUser()", tabindex = "10" })
I figured out that one of the posted questions did have the correct answer for my problem. I was just trying to do use it incorrectly. I was adding "string.Empty" to the wrong location. This is the solution.
#Html.DropDownListFor(m => m.User.StateID,
new SelectList(Model.User.States.Where(filter => filter.Active && (filter.CountryID == 1))
.Select(item => new
{
ID = item.StateProvinceID,
Description = item.Name
}),
"ID",
"Description",
Model.User.StateID),
string.Empty,
new { #data_bind = "value: user.StateID, enable:!isSiteUser()", tabindex = "10" })

Conditional enabled / disable asp.net mvc textbox

This is what I tried:
#Html.TextBoxFor(model => model.EntryDate, new { style="width:90px;",((_new || _modify) ? #disabled="disabled":"") }) #Html.ValidationMessageFor(model => model.EntryDate)
The following will work because there is only one html attribute
#Html.TextBoxFor(m => m.EntryDate, (_new || _modify)
? new { #disabled = "disabled" }
: null)
However once you add the style attribute, this will generate an error because there is no implicit conversion between new { #disabled = "disabled", #Style="width:90px;" } and new { #Style="width:90px;" } so you need to do this in an if block
#if(_new || _modify) {
#Html.TextBoxFor(m => m.EntryDate, new { #disabled = "disabled", style="width:90px;")}
} else {
#Html.TextBoxFor(m => m.EntryDate, new { style="width:90px;" })
}
Edit
Casting the html dictionary to object seems to work but I've not fully tested this (and I'm not sure that its "a simple and elegant way to to it")
#Html.TextBoxFor(m => m.EntryDate, (_new || _modify)
? (object)new { #disabled = "disabled", style="width:90px;" }
: (object)new { style="width:90px;" })
I am not sure but try this one:
#Html.TextBoxFor(model => model.EntryDate, (_new || _modify) ? new{ #Style="width:90px;", #Disabled="disabled"} : new{ #Style="width:90px;"})

Resources