0

問題があります: UserControl A を作成しました。追加されたすべてのビューで Usercontrol アクションを再利用するために、A には独自のコントローラーがあります。UserControl A はモデル UserControlModel を期待しています。私がしたいことは、含まれるビューのモデルを更新することですユーザー コントロール A.

この値を永続化するために、UserControl からメイン ビューまたはユーザー コントロールを含む任意のビューに値を渡すにはどうすればよいですか?

いくつかのコード:

ユーザーコントロールコントローラー

 public class ColorBlockUserControlController : Controller
    {
        /// <summary>
        /// Callback method for ColorBlockUserControl's AJAX form.
        /// </summary>
        /// <param name="model">ColorModel</param>
        /// <returns>HTML string to be dispalyed within target DIV tag.</returns>
        [HttpPost]
        public ActionResult DrawColor(ColorModel model)
        {
            if (ModelState.IsValid)
            {
                return Content(ColorManager.GetGradientDiv(model.RGBColor, model.Width, model.Height));
            }
            else
            {
                return Redirect("/");
            }
        }


        [AcceptVerbs(HttpVerbs.Post)]
        public JsonResult Sumar(int Height, int Width)
        {
            return Json(true);
        }
    }

ユーザー コントロール HTML :

<script type="text/javascript">
    $(document).ready(function () {
        var Valores = {
            'Height': 30,
            'Width': 30
        };

        $("#btnSumar").click(function () {
            var targetDiv = "#TargetResult";

            $.post(
            '/ColorBlockUserControl/Sumar',
            Valores,
            function (data) {
                if (data === true) {
                    debugger;
                    $(targetDiv).html('Sumado');
                }
                else {

                    alert('Failed to save the user');

                }
            },
            'json'
        );
        });

    });

</script>

@using (Ajax.BeginForm("DrawColor", "ColorBlockUserControl", new AjaxOptions { UpdateTargetId = "color-" + Model.Id }))
{
    <div>RGB (example: FFAA00)</div>
    <div class="formLine">
        @Html.EditorFor(x => x.RGBColor)
    </div>

    @Html.ValidationMessageFor(x => x.RGBColor)

    <div>Width</div>
    <div class="formLine">
        @Html.EditorFor(x => x.Width)
    </div>

    <div>Height</div>
    <div class="formLine">
        @Html.EditorFor(x => x.Height)
    </div>

    <div id="btnSumar" style="cursor:pointer;">This is a Test</div>


    <p><input type="submit" value="Color Me!" /></p>

    <div id="color-@Model.Id"><!-- Will be populated by AJAX method --></div>
}

UserControl で表示:

@model MVCColorUserControl.Models.HomeModel
@using MVCColorUserControl.Models

@{
    ViewBag.Title = "Color Demo";
}
<h2>@Model.WelcomeText</h2>
<p>
    A Partial Control</p>
    @Html.Partial("UserControls/ColorBlockUserControl", new ColorModel())
<hr />
@*<p>
    A Partial Control that is initialized on Server-Side</p>
@{
    Html.RenderAction("InitializeUserControl");
}*@

@Html.ActionLink("Ir a Test View", "Test")


@Html.ActionLink("Usando otro controller", "InNewController")
4

1 に答える 1

0

FormCollection に関する質問に答えるには:

コントローラーでこれを行うことができます:

[HttpPost]
public ActionResult GetMeSomeValues(FormCollection formCollection)
{
   string text = formCollection.Get("Name of the input or whatever you have in your form");

   //same goes for int values which you will need to convert from a string.
   //Now if you want to pass the value to a Model simply create a new Model in here
   //and add it.

   var model = new Model();
   model.Value = text;

   return View(model);   
}
于 2012-05-21T08:04:11.143 に答える