【问题标题】:How do I refresh an html element?如何刷新 html 元素?
【发布时间】:2012-09-17 20:38:35
【问题描述】:

我已经尝试为我的问题寻找任何可能的解决方案,但到目前为止我所看到的都没有。无论如何,我正在使用 MVC 3,并且我有一个名为 Add Event 的表单。在该页面上,我有一个下拉列表,其中包含用户可以选择的位置列表。我在该下拉列表下方有一个链接,允许用户添加新位置。现在,我有文本框、下拉列表等用于在局部视图中创建新位置,当我单击链接时,该位置将显示在下拉列表下方。

无论如何,我需要刷新下拉列表,这样当我添加新位置时,它会直接出现在列表中。现在发生的事情是在我单击保存后,部分视图会自行隐藏,我仍然需要刷新整个页面以获取下拉列表上的新位置,然后删除我在相同的 texbox 和下拉列表中输入的所有内容页面。

我怎样才能使用 javascript/ajax 做到这一点?

【问题讨论】:

  • 如果我说得对,我认为您只需要通过使用 javascript 添加一个新选项来将新位置的数据从部分视图移动到下拉列表即可帮助您做到这一点给我一些代码提高认识
  • 您可能希望将 ASP.NET 标记添加到您的问题中。
  • 在 ajax 调用的成功函数中,我认为您必须使用 javascript 将新位置添加到下拉列表中,就像 amesh 对您应该从 ajax 调用返回的数据所做的那样,我认为您需要返回要设置为 text 属性的位置名称和要设置为新选项的 value 属性的位置 id :) 如果您需要更多详细信息,请说出来 :)
  • @Html.DropDownListFor(model => model.LocationId, Model.LocationSelectList) 添加位置
    @Html.Partial ("AddNewLocation")
    这是我在局部视图函数 saveLocation() { var value = { location_City: $('#newCity').val(); 上添加位置时的 javascript $.ajax({ type: "POST", traditional: true, url: "/Event/jsonAdd/", dataType: "json", data: value, success: function (result) {} });
  • 抱歉,我似乎无法在此处正确格式化代码。顺便说一句,我在主窗体上使用 javascript 调用局部视图,然后使用 javascript 在局部视图上保存新位置并隐藏局部视图。

标签: javascript html asp.net-mvc asp.net-mvc-3 model-view-controller


【解决方案1】:

使用 jQuery,你可以只重新加载你想要的元素:

$('#menu').load("myServerScript.php #menu");

http://api.jquery.com/load/

【讨论】:

    【解决方案2】:

    这可能会对你有所帮助..

    var opt = document.createElement("option");
         // Assign text and value to Option object
        opt.text = Text;
        opt.value = Value;        
    
        // Add an Option object to Drop Down
        document.getElementById("YourDropDownID").options.add(opt,null);
    

    【讨论】:

    • 对不起,因为我基本上有两个不同的视图(主窗体和局部视图)并且都使用ajax/javascript,我是否在局部视图上添加代码?
    • 您可以在视图或局部视图中使用此代码。没关系,因为最终两者都在浏览器中会面。
    • 好的,所以我不确定我是否有正确的值,但这是我迄今为止在 javascript 上尝试过的,但它似乎不起作用。
    • $.ajax({ type: "POST", traditional: true, url: "/Service/jsonEdit/", dataType: "json", data: propertyValue, success: function (result) { document.getElementById('hideAddProperty').style.display = "none"; var opt = document.createElement("option"); opt.text = propertyValue; opt.value = propertyValue; document.getElementById('#propertyReload') .options.add(opt, null);
    【解决方案3】:

    这可以用 jQuery 来完成。 我的做法是这样的。假设您有一个看起来像这样的表单:

    <form method="post" action="#">
        <select id="myList" name="myList">
            <option value="1">Value 1</option>
            <option value="2">Value 2</option>
        </select>
        <input type="text" id="newValue" name="newValue" />
        <a href="#" id="btn">add new value</a>            
        <input type="submit" value="Submit">
    </form>
    

    其中 myList 是您要添加新值并刷新的下拉列表,newValue 是接收要添加到下拉列表 (myList) 的新值的文本字段,ID 为 btn 的链接是添加按钮。您可以添加一个看起来像这样的 jQuery:

    <script type="text/javascript">
        $(document).ready(function () {
            $("#btn").click(function (event) {
                event.preventDefault();
                $.post("/home/addvalue", { value: $("#newValue").val() }, function (result) {
                    if (result != null) {
                        $("#myList").append("<option value='" + result.id + "' selected='selected'>" + result.text + "</option>");
                    }
                });
            });
        });
     </script>
    

    当您单击链接 (btn) 时,我会从文本框中收集值(并且只是该值)并将 POST(表单提交)发送到服务器。 我猜您希望服务器给出某种答案,其中包括新插入的值的 id。 如果服务器发回该新 id,然后我将新结果附加到列表中(并将其设置为选定的)

    在服务器端,您的代码可能看起来像这样

    [HttpPost]
    public JsonResult AddValue(FormCollection collection) 
    { 
        //do database inser for the new value and get the id
        var response = new Dictionary<string, object>();
        response.Add("id", 3);//3 here represents that last id
        response.Add("text", collection["value"]); //the value you sent for the new option
        return Json(response);
    }
    

    您收到 POST(ed) 数据并保存到数据库。一旦保存了值并且您将新的 id 保存到字典中,然后您将序列化并作为 json 发送回上面的 javascript。 这将更新您的表单,因此当您实际点击提交 myList 值时,您将成为新值。 希望这会有所帮助(如果有,请接受答案)

    【讨论】:

    • 这种方法是否适用于两个不同的 html 页面?我基本上有一个添加事件的视图和一个添加新位置的部分视图
    • 只要所有 DOM 元素(在 javascript 中引用的元素)都被脚本加载并访问。来自哪里并不重要。
    猜你喜欢
    • 2017-09-14
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多