I've successfully used the Telerik MVVM with stand HTML form field elements, but how do I bind a viewModel property to a Telerik MVC Textbox? I'm assuming through the .HTMLAttributes method, but I don't know the syntax to use... Where would I put the data-bind?
@(Html.Kendo().TextBox()
.Name(
"docketNumber"
)
.HtmlAttributes(
new
{ placeholder =
"Docket Number"
, required =
"required"
, validationmessage =
"Enter {0}"
})
}
5 Answers, 1 is accepted
While I have your attention, why can I not find any legitimate documentation for the Kendo TextBox? I realize it's a simple text input field, but it is a valid component of the Telerik MVC controls, and yet I cannot seem to find any documentation nor examples for it. I tried to add an .Events() to it so I can register a change to the text box, but I'm told
'TextBoxBuilder<string>'
does not contain a definition
for
'Events'
and no extension method
'Events'
accepting a first argument of type
'TextBoxBuilder<string>'
could be found (are you missing a
using
directive or an assembly reference?)
which just really makes no sense at all...
I really hope someone comes along and can help me out on this...So I believe I've figured out the syntax for MVVM binding on the Kendo version of TextBox, except I cannot actually get it to work. Here is the text box code:
<div id=
"uploadForm"
style=
"width: 45%"
>
@(Html.Label(
"HRP Docket Number: "
))
@(Html.Kendo().TextBox()
.Name(
"docketNumber"
)
.HtmlAttributes(
new
{ placeholder =
"Docket Number"
, required =
"required"
, validationmessage =
"Enter {0}"
, data_bind =
"value: DocketNumber, events: { change: onChange }"
})
)
<span
class
=
"k-invalid-msg"
data-
for
=
"clientID"
></span>
<br />
<div
class
=
"k-content"
>
<input type=
"file"
id=
"FileUpload1"
style=
"width: 75%;"
/>
<span
class
=
"k-invalid-msg"
data-
for
=
"files"
></span>
</div>
</div>
The file upload component is disabled until they enter a Docket number. Here is the observable declaration and binding statements in the javascript:
var
viewModel = kendo.observable({
DocketNumber:
""
,
onChange:
function
() {
if
(viewModel.get(
"DocketNumber"
) !==
""
) {
$(
"#FileUpload1"
).data(
"kendoUpload"
).setOptions({ enabled:
true
});
}
}
});
$(document).ready(
function
() {
var
ALLOWED_EXTENSIONS = [
".pdf"
];
kendo.bind($(
"#uploadForm"
, viewModel));
$(
"#FileUpload1"
).kendoUpload({
enabled:
false
,
async: {
saveUrl:
"@Url.Action("
UploadFile
", "
Document
")"
},
upload:
function
(e) {
e.data = {
docketNumber: viewModel.get(
"DocketNumber"
)
}
},
multiple:
false
,
localization: {
"select"
:
"Select file to import..."
},
select:
function
(e) {
var
extension = e.files[0].extension.toLowerCase();
if
(ALLOWED_EXTENSIONS.indexOf(extension) === -1) {
alert(
"Please, select a supported file format"
);
e.preventDefault();
return
;
}
},
success:
function
(e) {
}
});
});
});
The text box's change event never fires, so the file upload component never enables. I really need a solution for this otherwise I'm going to have to scrap everything, and start over with a completely different way to accomplish this, which I do not relish.
Joe:
In a community forum it's always good karma to give some small explanation of a self answered question. "I done figured it out" doesn't help those of use who haven't done so.
I know if I posted a question and someone replied 'I know the answer' I would feel that was an incomplete conversation.
"I know if I posted a question and someone replied 'I know the answer' I would feel that was an incomplete conversation."
Except the only person having a discussion in this particular thread it me, to myself. So no, it is not at all like your example.
As far as the event not firing, it was a misplaced parenthesis.