How to show Pound Symbol in Razor, MVC - html

I am trying to display the Pound symbol to a radio button in MVC 4, However I am unable to get this ASCII code parsed.
#Html.RadioButtonFor(m => m.Client.CodeID, "true", new { Name = "grp" }) #Html.LabelFor(m => m.ClientID, #Model.Price + Html.Raw("&#163"))

This works for me -
#Html.RadioButtonFor(m => m.Client.CodeID, "true", new { Name = "grp" })
#Html.LabelFor(m => m.ClientID, #Model.Price + "£")
Let me know if I assumed your question wrongly. My code worked for me IE and Chrome (latest versions)

Try using the HTML symbol for it - "£"

Related

Kendo MVC Razor Grid Custom Command does not have Action Definition

I am new to Kendo and are trying to add a custom command to a grid.
I have been going over example pages, StackOverflow, and Telerik's site and found multiple examples that has the following:
columns.Command(command =>
{
command.Custom("Details").Text("Show Details").Action("Details", "Billing");
});
When I try to use this, I get the following error:
'GridCustomActionCommandBuilder' does not contain a
definition for 'Action' and the best extension method overload
'UrlHelperExtensions.Action(IUrlHelper, string, object)' requires a
receiver of type 'IUrlHelper'
I then tried this example from telerik:
columns.Template(#<text>#Html.ActionLink("Edit", "Home", new { id = item.ProductID })</text>);
But get this error:
Cannot convert lambda expression to type 'string' because it is not a
delegate type
Just to confirm what is causing the error, then took out the ActionLink and used only this:
columns.Template(#<text>
<div>help me!!</div>
</text>);
and got the same error:
The total code snippet looks like this:
#(Html.Kendo().Grid<OrganisationEmployeesViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.EmployeeID).Visible(false);
columns.Template(#<text>
<div>help me!!</div>
</text>);
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.HtmlAttributes(new { style = "height:550px;" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Read(read => read.Action("Employees_Read", "Organisations"))
)
.Deferred()
)
I am using existing samples but don't know what is wrong.
I found a way for this to work:
columns.Template("<a href='" +
Url.Action("ControllerAction", "Controller") +
"?Parameter=#= RecID #'" +
">DisplayText</a>");
This can also be applied to a bound column like this:
columns.Bound(p => p.Name).ClientTemplate("<a href = '" +
Url.Action("Details", "Employees") +
"/#= EmployeeID #'" +
">#=Name#</a>");
And should you want to have a Custom Toolbar Action on the Kendo Grid:
I am using the standard bootstrap classes to apply defaults:
.ToolBar(t => t.ClientTemplate("<a class='k-button k-button-icontext k-grid-add' href='" +
Url.Action("OrganisationCreate", "Employees", new { OrganisationId = Model.OrganisationID }) +
"'><span class='k-icon k-add'></span>Add new Employee</a>") )

Using data-number-to-fixed as additionalViewData on Html.EditorFor

I want to use this properties data-number-to-fixed and data-number-stepfactor on my Html.EditorFor control but it does not allow me to do that. Currently the Editor for looks like this
#Html.EditorFor(model => model.CreditCardFees, new { htmlAttributes = new { #class = "form-control text-right", #step = "0.01", #type = "number" } })
But when I add those 2 attributes Visual Studio's Intellisense complains like such
and when I run it will show compiler error
Compiler Error Message: CS1525: Invalid expression term 'fixed'
Any ideas how do I use these 2 attributes?
Looks like I found an answer, just use _ "underscore" in replacement of the - "dashes", MVC will convert it to dashes on compile time.

How can I ensure Kendo Grid passes a numeric value with the correct separator to ASP.NET MVC?

I have a simple grid that uses a custom popup editor template. In the template, I'd like to use a Numeric Textbox.
Due to localization, the application keeps trying to use a comma to separate decimals in the numeric values. When these values are passed to the ASP.NET MVC back-end, the value is lost and null is passed. How can I ensure the posted value has a period separator?
I have tried setting the underlying field values to 2.5 instead of 2,5 in the grid's Save event, as well as tried to overwrite the e.model.WeightKg to 2.5. The value is still passed with a comma separator, as shown by inspecting the form data in the request.
My grid:
#(Html.Kendo().Grid<PackageViewModel>()
.Name("PackageGrid")
.Columns(columns => {
columns.Bound(o => o.PackageCode);
columns.Bound(o => o.WeightKg);
columns.Command(o => o.Edit());
})
.DataSource(d => d
.WebApi()
.Model(m => m.Id(o => o.PackageCode))
.Read(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Packages" })))
.Create(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Packages" })))
.Destroy(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Packages" id = "{0}" })))
.Update(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Packages" id = "{0}" })))
.PageSize(20)
)
.Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("Package"))
.Selectable()
.Deferred()
)
The numeric textbox in the template:
#Html.Kendo().NumericTextBoxFor(m => m.WeightKg).Decimals(8)
And finally, the unparsed form data, followed by the parsed form data:
sort=&group=&filter=&PackageCode=DOOS-B&WeightKg=2%2C5
sort:
group:
filter:
PackageCode:DOOS-B
WeightKg:2,5

Difference beetwen "Html.TextAreaFor helper" and "Textarea" html tag

I'am wondering is there any difference beetwen "Html.TextAreaFor helper" and "Textarea" html tag ?. I need add a javascript function "Onkeyup" on textarea, but when I'am using #Html.TextAreaFor helper like this for example:
#Html.TextAreaFor(model => model.TekstStopka, new { id ="ObiektID", #class = "MyClass", maxlength = "300", onkeyup = "MyFunction('ObiektID', 'SecondObiektID')"})
in page source Razer is replacing " ' " into " &# 39; " and function won't work. But when i do this:
<textarea name="TekstStopka" id="TekstStopka" class = "MyClass" data-val="true" data-val-required="*" maxlength = "300" onkeyup="MyFunction('ObiektID', 'SecondObiektID')">#Model.TekstStopka</textarea>
It seems to work just fine. Can I do that, or is there any difference in page security ?
It is always adviced to use htmlhelpers while working in MVC ,try this :
String onclick = String.Format("MyFunction({0},{1})", ObiektID,SecondObiektID);
#Html.TextAreaFor(model => model.TekstStopka, new { id ="ObiektID", #class = "MyClass", maxlength = "300", onkeyup = "#onclick"})
The TextAreaFor makes it easy to bind to model data. It then translates into the html textarea tag. You will also get a compilation error if you change the name of your model properties but forget to change it in the view.
Passing arguments to a javascript event can be achieved in multiple ways:
Example 1
#Html.TextAreaFor(model => model.Name, new {id = "123" onkeyup = "onkeyupevent('hello', id)" })
Example 2
#Html.TextAreaFor(model => model.Name, new {onkeyup = "onkeyupevent('hello', 123)" })
Example 3 (With model data)
#Html.TextAreaFor(model => model.Name, new {id = Model.Id, onkeyup = "onkeyupevent('hello', id)" })
Example 4 (With model data)
#Html.TextAreaFor(model => model.Name, new {id = Model.Id, onkeyup = "onkeyupevent('hello', " + Model.Id + ")" })
Javascript example:
function onkeyupevent(a1, a2) {
alert(a1 + ' ' + a1);
}

MVCContrib Grid Razor problem, Column.Action do not render

Code below works great with aspx view engine, i am trying to convert it to razor as below. Problem is first column do not show up.
I convert first column into link using action method. With razor it(first column) is not getting rendered in page at all. Rest of grid is fine.
What could be the problem?
#{Html.Grid(Model.Orders).Attributes(style => "width: 100%;").Columns(
column => {
column.For(x => x.OrderNumber).Action(p => {
#:<td>
Html.ActionLink(
p.OrderNumber.ToString(),
"orderdetail",
"OrderUpdate",
new { id = p.OrderNumber, backUrl = Url.Action("OrderHistory", new { controller = "DataController", id = ViewData["id"] }) },
new { });
#:</td>
}).HeaderAttributes(style => "text-align:left");
column.For(x => x.OrderTimeV2).HeaderAttributes(style => "text-align:left");
column.For(x => x.Status).HeaderAttributes(style => "text-align:left");
column.For(x => x.Type).HeaderAttributes(style => "text-align:left");
}).RowStart((p, row) => { }).Render();}
I have moved away from using mvccontrib grid as it doesn't make much sense in grid we have.
Anyway problem was code in the question does not return html but puts code directly into response stream. And code for columns rendered using razor which put's code into stream whenever called. so it ends up putting columns into stream before grid is rendered.
It was resolved by not using razor code in action called by grid.
Ok I got it working for me with the following
#Html.Grid(Model.Result).Columns(column => {
column.For(u => u.Name).Named("Name");
column.For(u => u.Code).Named("Code");
column.For(u => Html.ActionLink("Edit", "Edit", new { id = u.Id })).Named("Edit");
You can do a custom column to get what you want:
#Html.Grid(Model).Columns(column => {
column.Custom(
#<div>
<em>Hello there</em>
<strong>#item.Name</strong>
</div>
).Named("Custom Column");
})
From: MvcContrib Grid Custom Columns (Razor)
I did this when porting some .aspx pages to Razor.