рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЗрдирдкреБрдЯ
рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рдПрдХ HTML рдкреЗрдЬ рдкрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреБрд░рд╛рдиреЗ рд╕рдордп рд╕реЗ , рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЫрд┐рдкреЗ рд╣реБрдП рдЗрдирдкреБрдЯ ред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рдЙрд░реА рдкрддреЗ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ
<input type="hidden" name="webServiceUri" value="URI we need"/>
рдФрд░ рд╣рдо рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЛ рдирд╛рдо рд╕реЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдпрд╛ рд╕рд╛рджреЗ рдкреБрд░рд╛рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЬрдм рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ REST рд╕реЗрд╡рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреЗрдЬ (рд╕рддреНрд░ рдбреЗрдЯрд╛) рд╕реЗ AJAX рдЕрдиреБрд░реЛрдз рдкрд░ рд╕рднреА рдбреЗрдЯрд╛ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл, HTML рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ ASP.NET MVC рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
- рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ .NET рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- рд╣рдорд╛рд░реЗ рдкрд╛рд╕ MVC HtmlHelper рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХреНрд░рдордмрджреНрдз рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ
- ViewModel рдпрд╛ ViewBag рдХреЗ рдЕрдВрджрд░ View рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд┐рдХ рд╢реНрд░реЗрдгреА рдЙрддреНрддреАрд░реНрдг рдХреА рдЬрд╛рддреА рд╣реИ
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░ рдирд╛рдо рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рд╡реНрдпреВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╡реНрдпреВ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдкреЗрдЬ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:
<script type="text/javascript"> var settings = {"WebServiceUri":"URI we need","UserId":"1212"}; </script>
MVC HtmlHelper рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓реА:
Moq рдврд╛рдВрдЪреЗ рдФрд░ MSTest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг:
[TestMethod, TestCategory("Unit")] [ExpectedException(typeof(ArgumentNullException))] public void Should_Not_Accept_Null_VariableName() { HtmlHelper helper = new HtmlHelper(new Mock<ViewContext>().Object, new Mock<IViewDataContainer>().Object); helper.RenderJsToScriptBlock(null, null); } [TestMethod, TestCategory("Unit")] [ExpectedException(typeof(ArgumentNullException))] public void Should_Not_Accept_Empty_VariableName() { HtmlHelper helper = new HtmlHelper(new Mock<ViewContext>().Object, new Mock<IViewDataContainer>().Object); helper.RenderJsToScriptBlock(string.Empty, null); } [TestMethod, TestCategory("Unit")] public void Should_Return_Empty_MvcHtmlString_For_NullModel() { HtmlHelper helper = new HtmlHelper(new Mock<ViewContext>().Object, new Mock<IViewDataContainer>().Object); MvcHtmlString mvcHtmlString = helper.RenderJsToScriptBlock("variableName", null); Assert.AreEqual(mvcHtmlString, MvcHtmlString.Empty); } [TestMethod, TestCategory("Unit")] public void Should_Return_Correct_Result_For_Correct_Input() { const string expectedHtmlString = "<script type=\"text/javascript\">var variableName = {\"UserName\":\"Alex\"};</script>"; HtmlHelper helper = new HtmlHelper(new Mock<ViewContext>().Object, new Mock<IViewDataContainer>().Object); var model = new { UserName = "Alex" }; MvcHtmlString mvcHtmlString = helper.RenderJsToScriptBlock("variableName", model); Assert.AreEqual(mvcHtmlString.ToHtmlString(), expectedHtmlString); }